windows下测试udp通信
时间: 2023-05-19 11:03:57 浏览: 89
可以使用Winsock API来实现UDP通信,具体步骤如下:
1. 创建一个UDP套接字,使用socket()函数,指定协议族为AF_INET,类型为SOCK_DGRAM。
2. 绑定套接字到本地IP地址和端口号,使用bind()函数。
3. 接收数据,使用recvfrom()函数。
4. 发送数据,使用sendto()函数。
以下是一个简单的示例代码:
```
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int main()
{
WSADATA wsaData;
SOCKET sock;
struct sockaddr_in addr;
char buf[1024];
int len;
// 初始化Winsock库
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
printf("WSAStartup failed\n");
return 1;
}
// 创建UDP套接字
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == INVALID_SOCKET) {
printf("socket failed\n");
WSACleanup();
return 1;
}
// 绑定套接字到本地IP地址和端口号
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
addr.sin_addr.s_addr = INADDR_ANY;
if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) {
printf("bind failed\n");
closesocket(sock);
WSACleanup();
return 1;
}
// 接收数据
len = recvfrom(sock, buf, sizeof(buf), 0, NULL, NULL);
if (len == SOCKET_ERROR) {
printf("recvfrom failed\n");
closesocket(sock);
WSACleanup();
return 1;
}
buf[len] = '\0';
printf("Received: %s\n", buf);
// 发送数据
len = sprintf(buf, "Hello, client!");
if (sendto(sock, buf, len, 0, (struct sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) {
printf("sendto failed\n");
closesocket(sock);
WSACleanup();
return 1;
}
// 关闭套接字和Winsock库
closesocket(sock);
WSACleanup();
return 0;
}
```