1、server:(从文件读取数据发送到client)
s_file.c
1 #include "s_file.h" 2 3 int main() 4 { 5 int server_sock = 0; 6 int client_sock = 0; 7 struct sockaddr_in server_sock_addr = {0}; 8 struct sockaddr_in client_sock_addr = {0}; 9 socklen_t client_sock_size = 0; 10 FILE *p_file = NULL; 11 char file_data[10] = {0}; 12 int max_per_read = 0; 13 int cur_len = 0; 14 15 server_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 16 if (-1 == server_sock) { 17 printf("server_sock is fail\n"); 18 return 0; 19 } 20 memset(&server_sock_addr,0,sizeof(struct sockaddr_in)); 21 server_sock_addr.sin_family = AF_INET; 22 server_sock_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); 23 server_sock_addr.sin_port = htons(1028); 24 if (-1 == bind(server_sock,(struct sockaddr *)&server_sock_addr,sizeof(struct sockaddr))) { 25 printf("bind is failed\n"); 26 } 27 28 listen(server_sock,20); 29 30 // while(1) { 31 p_file = fopen("sug.log","rb"); 32 if (p_file == NULL) { 33 printf("open file fail\n"); 34 } 35 client_sock_size = sizeof(socklen_t); 36 client_sock = accept(server_sock,(struct sockaddr *)&client_sock_addr,&client_sock_size); 37 if (client_sock == -1) { 38 printf("accept is failed\n"); 39 } 40 max_per_read = sizeof(file_data); 41 do { 42 cur_len = fread(file_data,1,max_per_read,p_file); 43 if (cur_len >0) { 44 write(client_sock,file_data,cur_len); 45 } 46 }while (cur_len > 0); 47 fclose(p_file); 48 close(client_sock); 49 close(server_sock); 50 51 // } 52 return 0; 53 54 }
s_file.h
1 #ifndef S_FILE_H 2 #define S_FILE_H 1 3 4 #include <stdio.h> 5 #include <unistd.h> 6 #include <string.h> 7 #include <stdlib.h> 8 #include <arpa/inet.h> 9 #include <sys/socket.h> 10 #include <netinet/in.h> 11 12 #endif
Makefile:
CC = gcc CFLAGS = -Wall -g LDFLAGS = SRC_DIR = src INC_DIR = inc OBJ_DIR = obj SRC = $(wildcard *.c) $(wildcard $(SRC_DIR)/*.c) INC = $(wildcard *.h) $(wildcard $(INC_DIR)/*.h) INCLUDE = -I$(INC_DIR) #DIR = $(notdir$(SRC)) OBJ = $(addprefix $(OBJ_DIR)/,$(notdir $(patsubst %.c,%.o,$(SRC)))) VPATH = src:inc TARGET = s_test all: $(TARGET) $(TARGET):$(OBJ) $(CC) $^ -o $@ $(OBJ_DIR)/%.o:$(SRC) mkdir -p $(OBJ_DIR) $(CC) $(INCLUDE) -c $(CFLAGS) $< -o $@ clean: rm -rf $(OBJ_DIR) rm -f $(TARGET)
文件结构:
.
├── inc
│ ├── serv_test1.h
│ └── s_file.h
├── Makefile
├── obj
│ └── s_file.o
├── src
│ └── s_file.c
├── s_test
├── sug.log
2、client:(从server读取数据写入到文件中)
c_file.c
1 #include "c_file.h" 2 3 int main() 4 { 5 int client_sock; 6 struct sockaddr_in server_addr; 7 char file_data[10]; 8 FILE *p_file = NULL; 9 int read_len = 0; 10 11 client_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 12 if (client_sock == -1) { 13 printf("socket creator is failed\n"); 14 return 0; 15 } 16 memset(&server_addr,0,sizeof(struct sockaddr_in)); 17 server_addr.sin_family = AF_INET; 18 server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); 19 server_addr.sin_port = htons(1028); 20 if (connect(client_sock,(struct sockaddr *)&server_addr,sizeof(struct sockaddr)) == -1) { 21 printf("connect is failed\n"); 22 } 23 24 if ((p_file = fopen("sug-rec.log","wb+")) == NULL) { 25 printf("file open is failed\n"); 26 } 27 28 do { 29 read_len = read(client_sock,file_data,sizeof(file_data)); 30 if (read_len > 0) { 31 fwrite(file_data,read_len,1,p_file); 32 } 33 }while (read_len > 0); 34 35 fclose(p_file); 36 close(client_sock); 37 38 return 0; 39 }
c_file.h
1 #ifndef C_FILE_H 2 #define C_FILE_H 1 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <string.h> 7 #include <unistd.h> 8 #include <arpa/inet.h> 9 #include <sys/socket.h> 10 #include <netinet/in.h> 11 17 #endif /*C_FILE_H*/
Makefile:
1 CC = gcc 2 3 CFLAGS = -Wall -g 4 LDFLAGS = 5 6 SRC_DIR = src 7 INC_DIR = inc 8 OBJ_DIR = obj 9 10 SRC = $(wildcard *.c) $(wildcard $(SRC_DIR)/*.c) 11 INC = $(wildcard *.h) $(wildcard $(INC_DIR)/*.h) 12 INCLUDE = -I$(INC_DIR) 13 #DIR = $(notdir$(SRC)) 14 OBJ = $(addprefix $(OBJ_DIR)/,$(notdir $(patsubst %.c,%.o,$(SRC)))) 15 16 #TARGET = $(addprefix $(OBJ_DIR)/,serv_test1) 17 TARGET = c_test 18 19 all: $(TARGET) 20 21 $(TARGET):$(OBJ) 22 $(CC) $^ -o $@ 23 24 $(OBJ_DIR)/%.o:$(SRC) 25 mkdir -p $(OBJ_DIR) 26 $(CC) $(INCLUDE) -c $(CFLAGS) $< -o $@ 27 28 clean: 29 rm -rf $(OBJ_DIR) 30 rm -f $(TARGET)
文件结构:
. ├── c_test ├── inc │ └── c_file.h ├── Makefile ├── obj │ └── c_file.o ├── src │ └── c_file.c ├── sug-rec.log