用C语言 写一个windows下运行的udp
时间: 2024-05-03 14:16:43 浏览: 42
以下是一个简单的UDP客户端和服务器端的C语言代码示例,可以在Windows操作系统下运行:
UDP客户端:
```c
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib") //链接ws2_32.lib库
int main()
{
//初始化Winsock库
WSADATA wsa;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
printf("Winsock初始化失败!\n");
return 1;
}
//创建UDP套接字
SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (s == INVALID_SOCKET)
{
printf("创建套接字失败!\n");
WSACleanup();
return 1;
}
//设置服务器地址和端口号
SOCKADDR_IN serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(1234); //服务器端口号
serverAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //服务器IP地址
//向服务器发送数据
char sendData[] = "Hello, server!";
int sendResult = sendto(s, sendData, strlen(sendData), 0, (SOCKADDR*)&serverAddr, sizeof(serverAddr));
if (sendResult == SOCKET_ERROR)
{
printf("向服务器发送数据失败!\n");
closesocket(s);
WSACleanup();
return 1;
}
printf("已向服务器发送数据:%s\n", sendData);
//关闭套接字并清理Winsock库
closesocket(s);
WSACleanup();
return 0;
}
```
UDP服务器端:
```c
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib") //链接ws2_32.lib库
int main()
{
//初始化Winsock库
WSADATA wsa;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
printf("Winsock初始化失败!\n");
return 1;
}
//创建UDP套接字
SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (s == INVALID_SOCKET)
{
printf("创建套接字失败!\n");
WSACleanup();
return 1;
}
//绑定服务器地址和端口号
SOCKADDR_IN serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(1234); //服务器端口号
serverAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //任意IP地址
int bindResult = bind(s, (SOCKADDR*)&serverAddr, sizeof(serverAddr));
if (bindResult == SOCKET_ERROR)
{
printf("绑定套接字失败!\n");
closesocket(s);
WSACleanup();
return 1;
}
printf("服务器启动成功,等待客户端连接...\n");
//接收客户端发送的数据
SOCKADDR_IN clientAddr;
int clientAddrLen = sizeof(clientAddr);
char recvData[1024];
int recvResult = recvfrom(s, recvData, sizeof(recvData), 0, (SOCKADDR*)&clientAddr, &clientAddrLen);
if (recvResult == SOCKET_ERROR)
{
printf("接收客户端数据失败!\n");
closesocket(s);
WSACleanup();
return 1;
}
printf("已接收到客户端数据:%s\n", recvData);
//关闭套接字并清理Winsock库
closesocket(s);
WSACleanup();
return 0;
}
```
注意:在Windows下使用Winsock库进行网络编程需要先调用WSAStartup函数初始化Winsock库,然后在程序结束时调用WSACleanup函数清理Winsock库。另外,需要链接ws2_32.lib库。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)