Winsock编程基础2(UDP流程)
UDP用户数据报协议
服务器端
<1 创建套接字(socket)
<2 绑定IP地址和端口(bind)
<3 收发数据(sendto, recvfrom)
<4 关闭连接(closesocket)
客户端
<1 创建套接字(socket)
<2 收发数据(sendto, recvfrom)
<3 关闭连接(closesocket)
int sendto( SOCKET s, //用来发送数据的套接字 const char FAR *buf, //指向发送数据的缓冲区 int len, //要发送数据长度 int flags, //一般指定0 const struct sockaddr *to, //指向一个包含目标地址和端口号的sockaddr_in结构 int toLen //结构大小 ); int recvfrom(SOCKET s, char *FAR buf, int len, int flags, struct sockaddr FAR *from, int FAR* fromLen)
简单实例
服务器端
#include <iostream> #include <stdio.h> #include "InitSock.h" using namespace std; int main(void) { CInitSock initSock; //创建套接字 SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (s == INVALID_SOCKET) { cout << "Failed socke()" << endl; return 0; } sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(4567); addr.sin_addr.S_un.S_addr = INADDR_ANY; //绑定套接字到一个本地地址 if (bind(s, (LPSOCKADDR)&addr, sizeof(addr)) == SOCKET_ERROR) { cout << "Failed bind()" << endl; return 0; } //接收数据 char buf[1024]; sockaddr_in clientAddr; int nLen = sizeof(addr); while (TRUE) { int nRecv = recvfrom(s, buf, 1024, 0, (sockaddr*)&clientAddr, &nLen); if (nRecv > 0) { buf[nRecv] = '\0'; cout << "接收到数据" << inet_ntoa(clientAddr.sin_addr) << ": " << buf << endl; } } //关闭套接字 closesocket(s); return 0; }
客户端
#include <iostream> #include <stdio.h> #include "InitSock.h" using namespace std; int main(void) { CInitSock initSock; //创建套接字 SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (s == INVALID_SOCKET) { cout << "Failed socke()" << endl; return 0; } //创建套接字之后如果首先sendto可以不绑定 //若首先recvfrom则需要绑定 //填写远程地址信息 sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(4567); addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //发送数据 char szText[] = "UDP Server Demo\r\n"; sendto(s, szText, strlen(szText), 0, (sockaddr*)&addr, sizeof(addr)); closesocket(s); cout << "数据已发送" << endl; getchar(); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix