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