电子产品世界 » 论坛首页 » 综合技术 » 智能硬件与可穿戴 » 简单的UDP通信


共8条 1/1 1 跳转至

简单的UDP通信

专家
2017-09-10 17:43:19    评分

TCP维持起来比较复杂,相对来说,UDP就简单很多了,正好有一个东西需要传递一些信息,就又学习了一下UDP
首先需要建立一个UDP的接收端,尽量化简,有什么问题再说吧
代码很简单

int listenPort = 4567;
ipEndPoint = new IPEndPoint(IPAddress.Any, listenPort);
udpReceive = new UdpClient(ipEndPoint);
IAsyncResult iar = udpReceive.BeginReceive(new AsyncCallback(ReceiveCallback), udpReceive);

接收回调

private void ReceiveCallback(IAsyncResult iar)
{
    UdpClient udpReceive = iar.AsyncState as UdpClient;
    Byte[] receiveBytes = udpReceive.EndReceive(iar, ref ipEndPoint);
    string receiveString = Encoding.Default.GetString(receiveBytes);
    udpReceive.BeginReceive(new AsyncCallback(ReceiveCallback), udpReceive);
}





专家
2017-09-10 17:44:47    评分
2楼

然后就需要一个测试的客户端了

byte[] buf = Encoding.UTF8.GetBytes("MikuQ");
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 4567);
UdpClient udpSend = new UdpClient();
udpSend.Send(buf, buf.Length, remoteEP);
udpSend.Close();

不知道Close是不是多余的,有时间再研究

换C语言试试,要加一句#pragma comment(lib,"WS2_32.lib")

int sockfd=socket(AF_INET,SOCK_DGRAM,0);  
char buf[80];
struct sockaddr_in adr_srvr;  
adr_srvr.sin_family=AF_INET;  
adr_srvr.sin_port=htons(4567);  
adr_srvr.sin_addr.s_addr = inet_addr("127.0.0.1");  
memset(adr_srvr.sin_zero,0,8);
sprintf(buf,"%d:%s",0,str);  
int z=sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&adr_srvr,sizeof(adr_srvr));

大概这个样子吧,记录一下,有时间再写TCP的。



助工
2017-09-10 21:31:36    评分
3楼

大神这个笔记,一句注释都没有,我等吃瓜群众只能围观了


高工
2017-09-11 08:26:32    评分
4楼

大神这个笔记,一句注释都没有,我等吃瓜群众只能围观了


专家
2017-09-11 08:39:30    评分
5楼

Close并不是多余的,它保证每次发送完,都能关闭相差端口。

如果连续发送多组数据,则不建议关闭,否则还是用完就关闭好。


专家
2017-09-12 09:29:11    评分
6楼

写一写TCP通讯吧!

大家都等着看呢


专家
2017-09-14 14:58:39    评分
7楼

等待TCP


菜鸟
2018-01-22 18:17:21    评分
8楼

  UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。

  UDP协议全称是用户数据报协议[1] ,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。

  与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

  



共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]