C++ 原生 Socket 编程的 TCP 通信 demo
C 原生 Socket 编程的 TCP 通信 demo服务器端 server.cpp客户端 client.cpp改进方向服务器端 server.cpp#includeiostream#includecstring#includeunistd.h#includearpa/inet.hintmain(){intserver_fd,client_fd;structsockaddr_inserver_addr,client_addr;socklen_t client_lensizeof(client_addr);charbuffer[1024]{0};// 1. 创建 socketserver_fdsocket(AF_INET,SOCK_STREAM,0);if(server_fd0){perror(socket creation failed);return-1;}// 2. 绑定地址和端口server_addr.sin_familyAF_INET;server_addr.sin_addr.s_addrINADDR_ANY;// 监听所有网卡server_addr.sin_porthtons(8888);if(bind(server_fd,(structsockaddr*)server_addr,sizeof(server_addr))0){perror(bind failed);return-1;}// 3. 监听if(listen(server_fd,3)0){perror(listen failed);return-1;}std::coutServer listening on port 8888...std::endl;// 4. 接受客户端连接client_fdaccept(server_fd,(structsockaddr*)client_addr,client_len);if(client_fd0){perror(accept failed);return-1;}std::coutClient connected from inet_ntoa(client_addr.sin_addr)std::endl;// 5. 接收数据intbytes_readread(client_fd,buffer,sizeof(buffer)-1);if(bytes_read0){buffer[bytes_read]\0;std::coutReceived: bufferstd::endl;}// 6. 发送回复constchar*replyServer received your message;send(client_fd,reply,strlen(reply),0);// 7. 关闭连接close(client_fd);close(server_fd);return0;}客户端 client.cpp#includeiostream#includecstring#includeunistd.h#includearpa/inet.hintmain(){intsock;structsockaddr_inserver_addr;charbuffer[1024]{0};// 1. 创建 socketsocksocket(AF_INET,SOCK_STREAM,0);if(sock0){perror(socket creation failed);return-1;}// 2. 配置服务器地址server_addr.sin_familyAF_INET;server_addr.sin_porthtons(8888);if(inet_pton(AF_INET,127.0.0.1,server_addr.sin_addr)0){perror(invalid address);return-1;}// 3. 连接服务器if(connect(sock,(structsockaddr*)server_addr,sizeof(server_addr))0){perror(connection failed);return-1;}// 4. 发送消息constchar*messageHello from C client;send(sock,message,strlen(message),0);std::coutMessage sent: messagestd::endl;// 5. 接收回复intbytes_readread(sock,buffer,sizeof(buffer)-1);if(bytes_read0){buffer[bytes_read]\0;std::coutServer reply: bufferstd::endl;}// 6. 关闭 socketclose(sock);return0;}编译运行# 编译g server.cpp-oserver g client.cpp-oclient# 先启动服务器./server# 另开终端运行客户端./client改进方向