#include #include #include #include #include #include #include #include #include #include #include #include /* 监听后,一直处于accept阻塞状态, 直到有客户端连接, 当客户端如数quit后,断开与客户端的连接 */ int main(int args, char** argv) { int fd; struct sockaddr_in server_addr; struct sockaddr_in clientAddr; int addr_len = sizeof(clientAddr); int client; char buffer[200]; int iDataNum; char ip[] = "192.168.209.193"; char *str = ip; uint16_t port = 61; //建立socket fd = socket(AF_INET, SOCK_STREAM, 0); if(fd == -1) { printf("socket failed"); return -1; } bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(port); printf("the value of str:%s\n", str); //将IP地址转换成网络字节序 int ret = inet_pton(AF_INET, str, &server_addr.sin_addr); printf("the value of ret is:%d\n",ret); printf("inet_pton:0x%x\n", server_addr.sin_addr.s_addr); if(ret < 0) { printf("error"); return -1; } int i = bind(fd, (struct sockaddr *)&server_addr, sizeof(server_addr)); printf("the value of i is :%d\n", i); if(i < 0) { printf("bind error"); return -1; } //开启监听,第二个参数是最大监听数 listen(fd,5); if(listen(fd, 5) < 0) { printf("listen error"); return -1; } while(1) { printf("监听端口: %d\n", port); client = accept(fd, (struct sockaddr*)&clientAddr, (socklen_t*)&addr_len); if(client < 0) { printf("accept error"); continue; } printf("等待消息...\n"); printf("IP is %s\n", inet_ntoa(clientAddr.sin_addr)); printf("Port is %d\n", htons(clientAddr.sin_port)); while(1) { printf("读取消息:"); buffer[0] = '\0'; iDataNum = recv(client, buffer, 1024, 0); if(iDataNum < 0) { printf("recv null"); continue; } buffer[iDataNum] = '\0'; if(strcmp(buffer, "quit") == 0) break; printf("%s\n", buffer); printf("发送消息:"); scanf("%s", buffer); printf("\n"); send(client, buffer, strlen(buffer), 0); if(strcmp(buffer, "quit") == 0) break; } } close(fd); return 0; }