佛山市建设局网站,百度直接打开,如何在海外推广网站,网站制作的困难与解决方案目录
UDP服务器
UDP客户端 在C中#xff0c;使用UDP协议进行网络通信通常涉及到socket编程。下面我将给出基于UDP的简单的客户端和服务器示例代码。这些示例将使用C标准库以及POSIX套接字接口#xff08;主要适用于Linux和类Unix系统#xff09;。如果你在使用Windows中使用UDP协议进行网络通信通常涉及到socket编程。下面我将给出基于UDP的简单的客户端和服务器示例代码。这些示例将使用C标准库以及POSIX套接字接口主要适用于Linux和类Unix系统。如果你在使用Windows可能需要使用Winsock库但这里我们主要关注POSIX接口。
UDP服务器
UDP服务器的主要任务是监听特定端口上的数据报并处理接收到的数据。
#include iostream
#include sys/socket.h
#include netinet/in.h
#include unistd.h
#include cstring #define PORT 8080
#define BUFFER_SIZE 1024 int main() { int server_fd, new_socket; struct sockaddr_in address; int opt 1; int addrlen sizeof(address); char buffer[BUFFER_SIZE] {0}; // 创建 socket 文件描述符 if ((server_fd socket(AF_INET, SOCK_DGRAM, 0)) 0) { perror(socket failed); exit(EXIT_FAILURE); } // 绑定 socket 到端口 8080 address.sin_family AF_INET; address.sin_addr.s_addr INADDR_ANY; address.sin_port htons(PORT); if (bind(server_fd, (struct sockaddr *)address, sizeof(address)) 0) { perror(bind failed); exit(EXIT_FAILURE); } // 设置 socket 选项 if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, opt, sizeof(opt))) { perror(setsockopt); exit(EXIT_FAILURE); } while (true) { // 接收数据 int len recvfrom(server_fd, (char *)buffer, BUFFER_SIZE, MSG_WAITALL, (struct sockaddr *)address, (socklen_t*)addrlen); buffer[len] \0; std::cout Message from client: buffer std::endl; // 发送响应如果需要 // sendto(server_fd, (const char *)buffer, strlen(buffer), MSG_CONFIRM, (const struct sockaddr *)address, addrlen); } return 0;
}
UDP客户端
UDP客户端的主要任务是向服务器发送数据报并可能接收来自服务器的响应。
#include iostream
#include sys/socket.h
#include netinet/in.h
#include arpa/inet.h
#include unistd.h
#include cstring #define PORT 8080 int main() { struct sockaddr_in serv_addr; int sock 0; char *hello Hello from client; char buffer[1024] {0}; if ((sock socket(AF_INET, SOCK_DGRAM, 0)) 0) { std::cerr Socket creation error std::endl; return -1; } serv_addr.sin_family AF_INET; serv_addr.sin_port htons(PORT); // 将IPv4地址从文本转换成二进制形式 if(inet_pton(AF_INET, 127.0.0.1, serv_addr.sin_addr)0) { std::cerr Invalid address/ Address not supported std::endl; return -1; } // 发送数据 sendto(sock, (const char *)hello, strlen(hello), MSG_CONFIRM, (const struct sockaddr *)serv_addr, sizeof(serv_addr)); // 接收来自服务器的数据如果需要 // int valread read(sock, buffer, 1024); // buffer[valread] \0; // std::cout Message from server: buffer std::endl; close(sock); return 0;
}
注意
这些示例仅用于展示UDP通信的基本结构。真实世界的应用中你可能需要处理更多的错误情况如网络错误、缓冲区溢出等。UDP是无连接的