用C++创建一个简单的UDP客户端

本文将指导读者如何使用C++编程语言创建一个基础的UDP客户端。内容涵盖UDP套接字的建立、数据发送及接收过程,适合初学者了解UDP通信机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <WinSock2.h>
#include <Windows.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
using namespace std;

int main() 
{
	WSADATA d;
	WORD w = MAKEWORD(2, 0);
	WSAStartup(w, &d);

	SOCKET s = socket(AF_INET, SOCK_DGRAM, 0);
	sockaddr_in serverAddr;
	serverAddr.sin_family = AF_INET;
	serverAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	serverAddr.sin_port = htons(9999);
	int len = sizeof(serverAddr);
	char buf[] = "Hello,UDP server!";
	sendto(s, buf, sizeof(buf), 0, (sockaddr*)&serverAddr,len);

	char recvBuf[512] = { 0 };
	int recvLen = recvfrom(s, recvBuf, 512, 0, (sockaddr*)&serverAddr, &len);
	if (recvLen > 0) {
		cout << recvBuf << endl;
	}

	getchar();
	closesocket(s);
	WSACleanup();
	return 0;
}

在C/C++中,你可以使用标准库中的`<sys/socket.h>`和`<arpa/inet.h>`来编一个基本的UDP(用户数据报协议)客户端和服务器示例。下面分别展示客户端和服务器的代码片段。 ### UDP服务器示例(udp_server.c) ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #define PORT 12345 int main() { struct sockaddr_in server_addr; int server_socket, bytes_received; // 创建套接字 server_socket = socket(AF_INET, SOCK_DGRAM, 0); if (server_socket < 0) { perror("Failed to create socket"); exit(EXIT_FAILURE); } // 绑定端口 memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("Failed to bind socket"); exit(EXIT_FAILURE); } printf("Server started, listening on port %d\n", PORT); while (true) { char buffer[1024]; bytes_received = recvfrom(server_socket, buffer, sizeof(buffer), 0, NULL, NULL); if (bytes_received <= 0) { perror("Error receiving data"); break; } printf("Received: %s\n", buffer); } close(server_socket); return 0; } ``` ### UDP客户端示例(udp_client.c) ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #define SERVER_IP "192.168.1.1" // 修改为你服务器的IP地址 #define PORT 12345 int main() { struct sockaddr_in server_addr; int client_socket, bytes_sent; // 创建套接字 client_socket = socket(AF_INET, SOCK_DGRAM, 0); if (client_socket < 0) { perror("Failed to create socket"); exit(EXIT_FAILURE); } // 设置服务器地址 memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr); char message[] = "Hello from Client!"; int message_length = strlen(message) + 1; // 包含终止符'\0' // 发送数据 bytes_sent = sendto(client_socket, message, message_length, 0, (struct sockaddr *)&server_addr, sizeof(server_addr)); if (bytes_sent <= 0) { perror("Failed to send data"); exit(EXIT_FAILURE); } printf("Sent: %s\n", message); close(client_socket); return 0; } ``` 在这个例子中,服务器监听特定的端口,并接收来自客户端的消息。客户端向服务器发送一个简单的消息。记得修改`SERVER_IP`变量为你的服务器的实际IP地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自由软件开发者

有你的鼓励,我会更加努力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值