📄 echo_server.c
字号:
#include<stdio.h>#include<stdlib.h>#include<sys/socket.h>#include<sys/types.h>#include<netinet/in.h>#include<strings.h>#include<unistd.h>#include<arpa/inet.h>#define ERROR -1#define MAX_DATA 1024int main(int argc, char **argv){ if(argc < 2) {printf("./server port\n"); exit(-1);} int sock; // create a socket if((sock = socket(AF_INET, SOCK_STREAM, 0)) == ERROR) { perror("server socket: "); exit(-1); } struct sockaddr_in server; bzero(&server, sizeof(server)); server.sin_family = AF_INET; server.sin_port = htons(atoi(argv[1])); server.sin_addr.s_addr = INADDR_ANY; // bind a socket if((bind(sock, (struct sockaddr *)&server, sizeof(server))) == ERROR) { perror("bind : "); exit(-1); }#define MAX_CLIENTS 2 // listen a socket if((listen(sock, MAX_CLIENTS)) == ERROR) { perror("listen"); exit(-1); } int cli; struct sockaddr_in client; int sockaddr_len = sizeof(struct sockaddr_in); int data_len; char data[MAX_DATA]; while(1) // Better signal handling required { if((cli = accept(sock, (struct sockaddr *)&client, &sockaddr_len)) == ERROR) { perror("accept"); exit(-1); } printf("New Client connected from port no %d and IP %s\n", ntohs(client.sin_port), inet_ntoa(client.sin_addr)); do { printf("wait data from client..\n"); data_len = read(cli, data, MAX_DATA); if(data_len > 0) { data[data_len] = '\0'; printf("%d bytes is sent: %s", data_len, data); write(cli, data, data_len); } else { perror("read"); } }while(data_len > 0); printf("Client disconnected\n"); close(cli); } close(sock); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -