添加一个while(1)循环来解决此问题, 在使用返回固定字符串时遇到了一点小问题, 不能直接用: 数组名=”xxx”, 这样相当于指针指向常量, 赋值要用strcpy, 不要用错了.光用c++的string了, c语言多少的忘了一点.

服务器可以原样返回, 也可以返回一个固定字符串, 以后支持http, 无非就是返回一串符合http协议格式的内容罢了!

server.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define buf_size 100

int main() {
int server_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

struct sockaddr_in server_sock_addr;
int len1 = sizeof(server_sock_addr);
memset(&server_sock_addr, 0, len1);
server_sock_addr.sin_family = AF_INET;
server_sock_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_sock_addr.sin_port = htons(1234);
bind(server_sock, (struct sockaddr *) & server_sock_addr, len1);

listen(server_sock, 20);

struct sockaddr_in client_sock_addr;
int len2 = sizeof(client_sock_addr);
char buffer[buf_size] = {0};
while(1) {
int client_sock = accept(server_sock, (struct sockaddr *) & client_sock_addr, &len2);

read(client_sock, buffer, buf_size);
printf("服务器收到: %s\n", buffer);

//write(client_sock, buffer, buf_size); //原样写回

strcpy(buffer, "qinpeng's web server");
write(client_sock, buffer, buf_size); //返回“qinpeng's web server”

close(client_sock);
memset(buffer, 0, buf_size);
}

close(server_sock);

return 0;
}

client.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h> 
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define buf_size 100

int main() {

struct sockaddr_in server_addr;
int len1 = sizeof(server_addr);
memset(&server_addr, 0, len1);
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(1234);

char buf_send[buf_size] = {0};
char buf_recv[buf_size] = {0};

while(1) {
int client_sock = socket(AF_INET, SOCK_STREAM, 0);
connect(client_sock, (struct sockaddr *) & server_addr, len1);
printf("客户端发送: ");
fgets(buf_send, buf_size, stdin);
write(client_sock, buf_send, strlen(buf_send));

read(client_sock, buf_recv, buf_size);
printf("服务器传回: %s\n\n", buf_recv);

memset(buf_recv, 0, sizeof(buf_recv));
memset(buf_send, 0, sizeof(buf_send));
close(client_sock);
}

return 0;
}