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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
#include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include <netdb.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #define SERVER_PORT 12345
int main() { int sock; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int addr_len = sizeof(server_addr); int client; char buffer[1024]; int DataNum; if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket"); return 1; } bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(sock, (struct sockaddr *)&server_addr, addr_len) < 0) { perror("connect"); return 1; } if(listen(sock, 5) < 0) { perror("listen"); return 1; } while(1) { printf("监听端口: %d\n", SERVER_PORT); client = accept(sock, (struct sockaddr*)&client_addr, (socklen_t*)&addr_len); if(client < 0) { perror("accept"); continue; } printf("等待消息...\n"); printf("IP is %s\n", inet_ntoa(client_addr.sin_addr)); printf("Port is %d\n", htons(client_addr.sin_port)); int n = 0; while(1) { DataNum = recv(client, buffer, 1024, 0); if(DataNum < 0) { perror("recv null"); continue; } if(strcmp(buffer, "quit") == 0) break; printf("读取消息:%s\n",buffer); memset(buffer,0,sizeof(buffer)); printf("发送消息:"); fflush( stdout ); n = read(0,buffer,1024); send(client, buffer, n, 0); printf("\n"); if(strcmp(buffer, "quit") == 0) break; } } close(sock); return 0; }
|