添加一个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); strcpy(buffer, "qinpeng's web server"); write(client_sock, buffer, buf_size); 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; }
|
Author:
Qin Peng
License:
Copyright (c) 2020 BY QPWLKQ LICENSE
Slogan:
每一个不曾起舞的日子, 都是对生命的辜负