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