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


共7条 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


共7条 1/1 1 跳转至

回复

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