C++ 套接字通信接收程序:详细解析和代码示例
#include\x3ciostream\x3e#include\x3csys\x2fsocket.h\x3e#include\x3cnetinet\x2fin.h\x3e#include\x3carpa\x2finet.h\x3e#include\x3cunistd.h\x3eint main() { int receiverSocket = socket(AF_INET, SOCK_STREAM, 0); if (receiverSocket == -1) { std::cerr << "Failed to create socket" << std::endl; return 1; } sockaddr_in receiverAddress{}; receiverAddress.sin_family = AF_INET; receiverAddress.sin_port = htons(12345); // 设置监听端口为12345 receiverAddress.sin_addr.s_addr = INADDR_ANY; if (bind(receiverSocket, (struct sockaddr *)&receiverAddress, sizeof(receiverAddress)) < 0) { std::cerr << "Failed to bind socket" << std::endl; return 1; } listen(receiverSocket, 3); // 开始监听连接,最多允许3个等待连接 std::cout << "Waiting for incoming connection..." << std::endl; int clientSocket = accept(receiverSocket, nullptr, nullptr); if (clientSocket < 0) { std::cerr << "Failed to accept connection" << std::endl; return 1; } char buffer[1024] = {0}; int bytesRead = read(clientSocket, buffer, 1024); // 从客户端接收数据 std::cout << "Received data: " << buffer << std::endl; close(clientSocket); close(receiverSocket); return 0; } 1. #include <iostream>:包含输入输出流的头文件,用于在控制台打印信息。 2. #include <sys/socket.h>:包含套接字相关的头文件。 3. #include <netinet/in.h>:包含IP地址相关的头文件。 4. #include <arpa/inet.h>:包含网络地址转换函数的头文件。 5. #include <unistd.h>:包含系统调用函数的头文件。 6. int receiverSocket = socket(AF_INET, SOCK_STREAM, 0);:创建一个套接字,返回一个文件描述符,用于接收连接。 7. if (receiverSocket == -1) { ... }:检查套接字是否成功创建,如果失败则输出错误信息并返回1。 8. sockaddr_in receiverAddress{};:定义套接字地址结构体。 9. receiverAddress.sin_family = AF_INET;:设置套接字地址结构体的地址族为IPv4。 10. receiverAddress.sin_port = htons(12345);:设置套接字地址结构体的端口号为12345,并将主机字节序转换为网络字节序。 11. receiverAddress.sin_addr.s_addr = INADDR_ANY;:将套接字地址结构体的IP地址设置为任意可用地址。 12. if (bind(receiverSocket, (struct sockaddr *)&receiverAddress, sizeof(receiverAddress)) < 0) { ... }:将套接字与地址结构体绑定在一起,如果失败则输出错误信息并返回1。 13. listen(receiverSocket, 3);:开始监听连接请求,最多允许3个等待连接。 14. int clientSocket = accept(receiverSocket, nullptr, nullptr);:接受客户端的连接请求,返回一个新的套接字文件描述符用于与客户端通信。 15. if (clientSocket < 0) { ... }:检查连接是否成功建立,如果失败则输出错误信息并返回1。 16. char buffer[1024] = {0};:创建一个大小为1024字节的字符数组作为接收数据的缓冲区。 17. int bytesRead = read(clientSocket, buffer, 1024);:从客户端套接字中读取数据,并将数据存储在缓冲区中。 18. std::cout << "Received data: " << buffer << std::endl;:打印接收到的数据。 19. close(clientSocket);:关闭与客户端的套接字连接。 20. close(receiverSocket);:关闭接收套接字。 21. return 0;:程序正常退出。 请注意,这只是一个简单的示例,没有对错误处理进行详细处理。在实际应用中,您可能需要更多的错误检查和处理来确保程序的稳定性和安全性。
原文地址: https://www.cveoy.top/t/topic/pN6V 著作权归作者所有。请勿转载和采集!