【C++】UDP通信:客户端向服务端发送消息并接收服务端回应的消息

52 篇文章 35 订阅 ¥19.90 ¥99.00
66 篇文章 2 订阅
35 篇文章 2 订阅

目录

1 UDP简介

2 通信

3 实践

4 运行结果

 

1 UDP简介

(1)UDP通信是无连接的,因此不需要connect操作。
(2)UDP通信过程需要指定数据接收端的IP和端口。
(3)UDP不对收到的数据进行排序。
(4)UDP对接收到的数据报不回复确认信息。
(5)如果发生了数据丢失,不会丢一半,会全部丢失。

2 通信

在UDP通信过程中,

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的UDP通信程序,包括了客户端服务端的代码: 服务端: ```c++ #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> using namespace std; const int BUF_SIZE = 1024; int main(int argc, char* argv[]) { if(argc != 2) { cout<<"Usage: "<<argv[0]<<" <port>"<<endl; exit(1); } int serv_sock = socket(AF_INET, SOCK_DGRAM, 0); sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(atoi(argv[1])); bind(serv_sock, (sockaddr*)&serv_addr, sizeof(serv_addr)); sockaddr_in clnt_addr; socklen_t clnt_addr_len = sizeof(clnt_addr); char buffer[BUF_SIZE]; while(true) { int str_len = recvfrom(serv_sock, buffer, BUF_SIZE, 0, (sockaddr*)&clnt_addr, &clnt_addr_len); sendto(serv_sock, buffer, str_len, 0, (sockaddr*)&clnt_addr, clnt_addr_len); } close(serv_sock); return 0; } ``` 客户端: ```c++ #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> using namespace std; const int BUF_SIZE = 1024; int main(int argc, char* argv[]) { if(argc != 3) { cout<<"Usage: "<<argv[0]<<" <IP> <port>"<<endl; exit(1); } int clnt_sock = socket(AF_INET, SOCK_DGRAM, 0); sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(argv[1]); serv_addr.sin_port = htons(atoi(argv[2])); while(true) { char message[BUF_SIZE]; cout<<"Enter message to send: "; cin>>message; sendto(clnt_sock, message, strlen(message), 0, (sockaddr*)&serv_addr, sizeof(serv_addr)); sockaddr_in from_addr; socklen_t from_addr_len = sizeof(from_addr); char buffer[BUF_SIZE]; int str_len = recvfrom(clnt_sock, buffer, BUF_SIZE, 0, (sockaddr*)&from_addr, &from_addr_len); buffer[str_len] = 0; cout<<"Message from server: "<<buffer<<endl; } close(clnt_sock); return 0; } ``` 这个程序简单地实现了一个服务端客户端之间的UDP通信服务端接收来自客户端消息,然后将其原封不动地发送客户端客户端循环地读取用户输入并将其发送服务端,然后等待来自服务端的响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jackilina_Stone

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值