在一台电脑实现udp通信的问题

探讨在同一台电脑上实现UDP通信时遇到的问题:客户端和服务器端能够发送数据,但无法显示接收的数据。分析可能的原因及解决策略。
部署运行你感兴趣的模型镜像

在一台电脑实现udp通信的问题


在同一个电脑上指定两个端口分别给客户端和服务器端,程序可以跑起来,但是客户端和服务器端只能发送数据,不能显示接受数据,这是为啥?

客户端的代码

在这里插入图片描述

服务器端代码

在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

在同一台电脑上使用C++实现UDP通信,可通过以下两种环境来达成,分别为Linux环境与Windows环境。 ### Linux环境 在Linux环境下,借助Socket套接字能够实现UDP协议通讯。以下是实现步骤及示例代码: 1. **创建Socket**:运用`socket`函数来创建一个UDP套接字。 2. **绑定地址**:利用`bind`函数把套接字绑定到指定的地址和端口。 3. **接收和发送数据**:使用`recvfrom`函数接收数据,使用`sendto`函数发送数据。 示例代码如下: ```cpp #include <iostream> #include <cstring> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define PORT 8888 #define BUFFER_SIZE 1024 // 服务端代码 void server() { int serverSocket = socket(AF_INET, SOCK_DGRAM, 0); if (serverSocket < 0) { std::cout << "socket error" << std::endl; return; } sockaddr_in serverAddr{}; serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = INADDR_ANY; serverAddr.sin_port = htons(PORT); if (bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) { std::cout << "bind error" << std::endl; close(serverSocket); return; } char buffer[BUFFER_SIZE]; sockaddr_in clientAddr{}; socklen_t clientAddrLen = sizeof(clientAddr); ssize_t recvLen = recvfrom(serverSocket, buffer, BUFFER_SIZE, 0, (struct sockaddr*)&clientAddr, &clientAddrLen); if (recvLen > 0) { buffer[recvLen] = '\0'; std::cout << "Received from client: " << buffer << std::endl; } const char* response = "Message received"; sendto(serverSocket, response, strlen(response), 0, (struct sockaddr*)&clientAddr, clientAddrLen); close(serverSocket); } // 客户端代码 void client() { int clientSocket = socket(AF_INET, SOCK_DGRAM, 0); if (clientSocket < 0) { std::cout << "socket error" << std::endl; return; } sockaddr_in serverAddr{}; serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); serverAddr.sin_port = htons(PORT); const char* message = "Hello, server"; sendto(clientSocket, message, strlen(message), 0, (struct sockaddr*)&serverAddr, sizeof(serverAddr)); char buffer[BUFFER_SIZE]; sockaddr_in serverResponseAddr{}; socklen_t serverResponseAddrLen = sizeof(serverResponseAddr); ssize_t recvLen = recvfrom(clientSocket, buffer, BUFFER_SIZE, 0, (struct sockaddr*)&serverResponseAddr, &serverResponseAddrLen); if (recvLen > 0) { buffer[recvLen] = '\0'; std::cout << "Received from server: " << buffer << std::endl; } close(clientSocket); } int main() { // 启动服务端线程 std::thread serverThread(server); // 等待一段时间,确保服务端启动 std::this_thread::sleep_for(std::chrono::seconds(1)); // 启动客户端线程 std::thread clientThread(client); serverThread.join(); clientThread.join(); return 0; } ``` ### Windows环境 在Windows环境下,可借助Boost库实现UDP通信。以下是调用示例: ```cpp #include "UDP_ByBoost.h" int main() { try { UDPServer server(12345); } catch (const std::exception& e) { std::cerr << "Exception: " << e.what() << std::endl; } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值