C#怎么使用udp实现消息的接收和发送(udp,开发技术)

时间:2024-05-05 08:20:34 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    使用udp实现消息的接收和发送

    代码比较简单,但是别忘记关闭防火墙进行测试。

    首先便是服务端,使用Socket进行实现,参考代码如下:

    privatestaticSocketudpServer;staticvoidstartUdpReceive(){Console.WriteLine("------startUdpReceive--");udpServer=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);udpServer.Bind(newIPEndPoint(IPAddress.Parse("192.168.2.106"),10023));newThread(ReceiveMessage){IsBackground=true}.Start();}privatestaticvoidReceiveMessage(){Console.WriteLine("------ReceiveMessage--");while(true){byte[]data=newbyte[1024];EndPointendPoint=newIPEndPoint(IPAddress.Any,0);intcount=udpServer.ReceiveFrom(data,refendPoint);if(count>0){stringmessage=Encoding.UTF8.GetString(data,0,count);Console.WriteLine("-----从ip"+(endPointasIPEndPoint).Address.ToString()+":"+(endPointasIPEndPoint).Port+"Get"+message);}}}

    在绑定socket端口的时候,需要提供绑定的ip和端口号,如这里是

    udpServer.Bind(newIPEndPoint(IPAddress.Parse("192.168.2.106"),10023));

    本机ip是是192.168.2.106,绑定端口是10023。然后使用while循环监听消息。对于本机来说,也可以使用 udpServer.Bind(new IPEndPoint(IPAddress.Any, 10023)); 只绑定端口,对于ip则不限制。

    也可以不用Socket而是直接使用UdpClient类来写接收端,效果类似:

    staticUdpClientudpcRecv;publicstaticvoidUdpServices(){try{IPAddressip=IPAddress.Parse("192.168.2.106");IPEndPointremoteIpep=newIPEndPoint(ip,10023);udpcRecv=newUdpClient(remoteIpep);ThreadthrRecv=newThread(ReceiveMessage22);thrRecv.IsBackground=true;thrRecv.Start();}catch(Exceptionex){MessageBox.Show("错误","请检查网络");}}privatestaticvoidReceiveMessage22(){IPEndPointremoteIpep=newIPEndPoint(IPAddress.Any,0);Console.WriteLine("-----remoteIpep:"+remoteIpep.Address+":"+remoteIpep.Port);while(true){try{byte[]bytRecv=udpcRecv.Receive(refremoteIpep);stringmessage=Encoding.UTF8.GetString(bytRecv,0,bytRecv.Length);Console.WriteLine("-----reveicemessage:"+message);}catch(Exceptionex){MessageBox.Show("UDP异常",ex.Message);}}}

    接下来是发送端:

    UdpClientudpClient=newUdpClient();try{udpClient.Connect("192.168.2.106",10023);Byte[]sendBytes=Encoding.ASCII.GetBytes("Isanybodythere??????");udpClient.Send(sendBytes,sendBytes.Length);}catch(Exceptionex){Console.WriteLine(ex.ToString());}

    如果代码爆红则应该是导包的问题,加入以下即可。

    usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingSystem.Net.Sockets;usingSystem.Net;usingSystem.Net.NetworkInformation;usingSystem.Management;usingSystem.Threading;

    上面都写好后可以测试了,但是我却遇到了问题,后面才知道是电脑端防火墙没开导致,所以和电脑端调试网络通信的时候,需要关闭防火墙,才能收到数据。

    C# 运用UDP

    面试的时候偶尔会问到UDP和TCP的一个区别。

    • TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。举例:打电话,需要双方都接通,才能进行对话。特点:效率低,数据传输比较安全。

    • UDP是一种面向无连接的传输层通信协议。举例:发短信,不需要双方建立连接,但是,数据报的大小应限制在64k以内。特点:效率高,数据传输不安全,容易丢包

    然后发现在网上查找关于C#运行UDP的实例,确实不好找,杂乱无章。痛定思痛!

    进行一个简单的发送和接收测试。

    目前,UDP本人亲自用过的场景,客户端和服务端需要进行数据传输,但是服务端,在开始时是连接的别的网络,切换过来之后,并不能知道当前的一个具体的IP地址。但是客户端的IP地址是固定的,此种场景下,服务端网络切换过来之后,建立UDP服务端,像指定的客户端(IP地址和端口号)发送数据,即可知道当前服务端的ip地址。

    服务端界面

    C#怎么使用udp实现消息的接收和发送

    usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceMyTest.UDP{publicpartialclassUDP_Sever:Form{IPEndPointremotePoint;UdpClientsever=null;publicUDP_Sever(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){IPAddressremoteIP=IPAddress.Parse(textBox1.Text.Trim());//假设发送给这个IPintremotePort=int.Parse(textBox2.Text.Trim());remotePoint=newIPEndPoint(remoteIP,remotePort);//实例化一个远程端点sever=newUdpClient();}privatevoidbutton2_Click(objectsender,EventArgse){if(!string.IsNullOrWhiteSpace(textBox3.Text.Trim())){stringsendString=textBox3.Text.Trim();//要发送的字符串byte[]sendData=Encoding.Default.GetBytes(sendString);//要发送的字节数组sever.Send(sendData,sendData.Length,remotePoint);//将数据发送到远程端点textBox3.Text="";}}privatevoidUDP_Sever_FormClosing(objectsender,FormClosingEventArgse){sever.Close();}}}

    客户端界面

    C#怎么使用udp实现消息的接收和发送

    usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Text;usingSystem.Threading;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceMyTest.UDP{publicpartialclassUDP_Client:Form{UdpClientclient=null;IPEndPointremotePoint;stringreceiveString=null;byte[]receiveData=null;publicUDP_Client(){InitializeComponent();CheckForIllegalCrossThreadCalls=false;}privatevoidbutton1_Click(objectsender,EventArgse){//实例化一个远程端点,IP和端口可以随意指定,等调用client.Receive(refremotePoint)时会将该端点改成真正发送端端点remotePoint=newIPEndPoint(IPAddress.Any,0);client=newUdpClient(int.Parse(textBox2.Text.Trim()));Threadthread=newThread(Revice);thread.IsBackground=true;thread.Start();}privatevoidRevice(){while(true){receiveData=client.Receive(refremotePoint);//接收数据receiveString=Encoding.Default.GetString(receiveData);listBox1.Items.Add(remotePoint.Address.ToString()+":"+receiveString);}}}}
     </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
    本文:C#怎么使用udp实现消息的接收和发送的详细内容,希望对您有所帮助,信息来源于网络。
    上一篇:Java多线程之锁怎么使用下一篇:

    5 人围观 / 0 条评论 ↓快速评论↓

    (必须)

    (必须,保密)

    阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18