c++怎么实现UDP通信_c++ UDP通信实现方法

C++中实现UDP通信需使用套接字API,首先创建套接字,客户端发送数据到服务器并可接收响应,服务器绑定端口监听并回复客户端,核心函数为sendto和recvfrom,需注意跨平台兼容性及资源释放。

c++怎么实现udp通信_c++ udp通信实现方法

在C++中实现UDP通信主要依赖操作系统提供的套接字(Socket)API。UDP是一种无连接的传输协议,适合对实时性要求高、能容忍少量数据丢失的场景,比如音视频传输或游戏通信。下面介绍如何在Linux和Windows平台下使用C++实现基本的UDP通信。

创建UDP客户端

UDP客户端的主要任务是向指定的服务器发送数据,并可选择接收响应。

步骤说明:

初始化套接字设置服务器地址信息发送数据到服务器可选:接收服务器返回的数据关闭套接字

示例代码(跨平台兼容,以Linux为主,Windows需初始化WSA):

立即学习“C++免费学习笔记(深入)”;

#include #include #ifdef _WIN32  #include   #pragma comment(lib, "ws2_32.lib")#else  #include   #include   #include   #include #endif

int main() {

ifdef _WIN32

WSADATA wsa;WSAStartup(MAKEWORD(2,2), &wsa);

endif

int sock = socket(AF_INET, SOCK_DGRAM, 0);if (sock == -1) {std::cerr << "Socket creation failedn";return -1;}

struct sockaddr_in serverAddr;std::memset(&serverAddr, 0, sizeof(serverAddr));serverAddr.sin_family = AF_INET;serverAddr.sin_port = htons(8888);serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 目标IP

const char msg = "Hello UDP Server";sendto(sock, msg, strlen(msg), 0,(struct sockaddr)&serverAddr, sizeof(serverAddr));

// 接收回传消息char buffer[1024];socklen_t len = sizeof(serverAddr);int n = recvfrom(sock, buffer, sizeof(buffer)-1, 0,(struct sockaddr*)&serverAddr, &len);if (n > 0) {buffer[n] = '';std::cout << "Received: " << buffer << std::endl;}

ifdef _WIN32

closesocket(sock);WSACleanup();

else

close(sock);

endif

return 0;}

创建UDP服务器

UDP服务器监听指定端口,接收来自客户端的数据并可回传响应。

关键点:

绑定本地IP和端口持续监听接收数据可获取客户端地址用于回复

示例代码:

#include #include #ifdef _WIN32  #include   #pragma comment(lib, "ws2_32.lib")#else  #include   #include   #include   #include #endif

int main() {

ifdef _WIN32

WSADATA wsa;WSAStartup(MAKEWORD(2,2), &wsa);

endif

int sock = socket(AF_INET, SOCK_DGRAM, 0);if (sock == -1) {std::cerr << "Socket creation failedn";return -1;}

struct sockaddr_in serverAddr;std::memset(&serverAddr, 0, sizeof(serverAddr));serverAddr.sin_family = AF_INET;serverAddr.sin_addr.s_addr = INADDR_ANY; // 监听所有网卡serverAddr.sin_port = htons(8888);

if (bind(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == -1) {std::cerr << "Bind failedn";

ifdef _WIN32

closesocket(sock);

else

close(sock);

endif

return -1;

}

std::cout

char buffer[1024];struct sockaddr_in clientAddr;socklen_t clientLen = sizeof(clientAddr);

while (true) {int n = recvfrom(sock, buffer, sizeof(buffer)-1, 0,(struct sockaddr*)&clientAddr, &clientLen);if (n > 0) {buffer[n] = '';std::cout

  // 回复客户端  const char* reply = "ACK";  sendto(sock, reply, strlen(reply), 0,         (struct sockaddr*)&clientAddr, clientLen);}

}

ifdef _WIN32

closesocket(sock);WSACleanup();

else

close(sock);

endif

return 0;}

编译与运行说明

Linux:

保存为 .cpp 文件,使用 g++ 编译命令:g++ udp_server.cpp -o server && ./server

Windows:

使用 Visual Studio 或 MinGW 编译确保链接 ws2_32.lib(Visual Studio 会自动处理#pragma)

注意事项

UDP不保证数据到达,也不保证顺序,应用层需自行处理每次 recvfrom 可能收到一个完整的报文(UDP是面向报文的)sendto 和 recvfrom 是UDP通信的核心函数跨平台时注意头文件和关闭套接字的差异

基本上就这些。只要理解了套接字的基本流程,UDP通信实现起来并不复杂,但要注意错误处理和资源释放。

以上就是c++++怎么实现UDP通信_c++ UDP通信实现方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478600.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 03:04:03
下一篇 2025年12月19日 03:04:18

相关推荐

发表回复

登录后才能评论
关注微信