C# 通过UDP进行异步通信的实例代码

C# 通过UDP进行异步通信的实例代码,第1张

概述C# 通过UDP进行异步通信实例代码

下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。

内存溢出小编现在分享给大家,也给大家做个参考。

C# 通过UDP进行异步通信的实例代码
服务器端:  using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.sockets;using System.Threading;namespace AsyncServer{    public class UdpState    {        public UdpClIEnt udpClIEnt;        public IPEndPoint ipEndPoint;        public const int BufferSize = 1024;        public byte[] buffer = new byte[BufferSize];        public int counter = 0;    }    public class AsyncUdpSever    {        private IPEndPoint ipEndPoint = null;        private IPEndPoint remoteEP = null;        private UdpClIEnt udpReceive = null;        private UdpClIEnt udpSend = null;        private const int ListenPort = 1100;        private const int remotePort = 1101;        UdpState udpReceiveState = null;        UdpState udpSendState = null;        private ManualresetEvent sendDone = new ManualresetEvent(false);        private ManualresetEvent receiveDone = new ManualresetEvent(false);        public AsyncUdpSever()        {            ipEndPoint = new IPEndPoint(IPAddress.Any,ListenPort);            remoteEP = new IPEndPoint(Dns.GetHostAddresses(Dns.GetHostname())[0],remotePort);            udpReceive = new UdpClIEnt(ipEndPoint);            udpSend = new UdpClIEnt();            udpReceiveState = new UdpState();                       udpReceiveState.udpClIEnt = udpReceive;            udpReceiveState.ipEndPoint = ipEndPoint;              udpSendState = new UdpState();            udpSendState.udpClIEnt = udpSend;            udpSendState.ipEndPoint = remoteEP;        }        public voID ReceiveMsg()        {            Console.Writeline("Listening for messages");            while(true)            {                lock (this)                {                      IAsyncResult iar = udpReceive.BeginReceive(new AsyncCallback(ReceiveCallback),udpReceiveState);                    receiveDone.WaitOne();                    Thread.Sleep(100);                }            }        }        private voID ReceiveCallback(IAsyncResult iar)        {            UdpState udpReceiveState = iar.AsyncState as UdpState;            if (iar.IsCompleted)            {                Byte[] receiveBytes = udpReceiveState.udpClIEnt.EndReceive(iar,ref udpReceiveState.ipEndPoint);                string receiveString = EnCoding.ASCII.GetString(receiveBytes);                Console.Writeline("Received: {0}",receiveString);                //Thread.Sleep(100);                receiveDone.Set();                SendMsg();            }        }          private voID SendMsg()        {            udpSend.Connect(udpSendState.ipEndPoint);            udpSendState.udpClIEnt = udpSend;            udpSendState.counter ++;              string message = string.Format("第{0}个UDP请求处理完成!",udpSendState.counter);            Byte[] sendBytes = EnCoding.Unicode.GetBytes(message);            udpSend.BeginSend(sendBytes,sendBytes.Length,new AsyncCallback(SendCallback),udpSendState);            sendDone.WaitOne();        }        private voID SendCallback(IAsyncResult iar)        {            UdpState udpState = iar.AsyncState as UdpState;            Console.Writeline("第{0}个请求处理完毕!",udpState.counter);            Console.Writeline("number of bytes sent: {0}",udpState.udpClIEnt.EndSend(iar));            sendDone.Set();        }          public static voID Main()        {            AsyncUdpSever aus = new AsyncUdpSever();            Thread t = new Thread(new ThreadStart(aus.ReceiveMsg));            t.Start();            Console.Read();        }    }}        客户端:  using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.sockets;using System.Threading;namespace AsyncclIEnt{    public class UdpState    {        public UdpClIEnt udpClIEnt = null;        public IPEndPoint ipEndPoint = null;        public const int BufferSize = 1024;        public byte[] buffer = new byte[BufferSize];        public int counter = 0;    }    public class AsyncUdpClIEnt    {        public static bool messageSent = false;        // Receive a message and write it to the console.        private const int ListenPort = 1101;        private const int remotePort = 1100;        private IPEndPoint localEP = null;        private IPEndPoint remoteEP = null;        private UdpClIEnt udpReceive = null;        private UdpClIEnt udpSend = null;        private UdpState udpSendState = null;        private UdpState udpReceiveState = null;        private int counter = 0;        private ManualresetEvent sendDone = new ManualresetEvent(false);        private ManualresetEvent receiveDone = new ManualresetEvent(false);        private Socket receiveSocket;        private Socket sendSocket;        public AsyncUdpClIEnt()        {            localEP = new IPEndPoint(IPAddress.Any,remotePort);            udpReceive = new UdpClIEnt(localEP);                       udpSend = new UdpClIEnt();                          udpSendState = new UdpState();            udpSendState.ipEndPoint = remoteEP;            udpSendState.udpClIEnt = udpSend;              udpReceiveState = new UdpState();            udpReceiveState.ipEndPoint = remoteEP;            udpReceiveState.udpClIEnt = udpReceive;              receiveSocket = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);            receiveSocket.Bind(localEP);              sendSocket = new Socket(AddressFamily.InterNetwork,ProtocolType.Udp);            sendSocket.Bind(remoteEP);        }        public voID SendMsg()        {              udpSend.Connect(remoteEP);                          //Thread t = new Thread(new ThreadStart(ReceiveMessages));            //t.Start();            Byte[] sendBytes;            string message;                       while (true)            {                  message = "ClIEnt" + (counter++).ToString();                lock (this)                {                    sendBytes = EnCoding.ASCII.GetBytes(message);                    udpSendState.counter = counter;                    udpSend.BeginSend(sendBytes,udpSendState);                    sendDone.WaitOne();                    Thread.Sleep(200);                    ReceiveMessages();                }            }                    }          public voID SendCallback(IAsyncResult iar)        {            UdpState udpState = iar.AsyncState as UdpState;            if (iar.IsCompleted)            {                Console.Writeline("第{0}个发送完毕!",udpState.counter);                Console.Writeline("number of bytes sent: {0}",udpState.udpClIEnt.EndSend(iar));                //if (udpState.counter == 10)                //{                //    udpState.udpClIEnt.Close();                //}                sendDone.Set();            }                   }          public voID ReceiveMessages()        {            lock (this)            {                udpReceive.BeginReceive(new AsyncCallback(ReceiveCallback),udpReceiveState);                receiveDone.WaitOne();                Thread.Sleep(100);            }          }        public voID ReceiveCallback(IAsyncResult iar)        {            UdpState udpState = iar.AsyncState as UdpState;            if (iar.IsCompleted)            {                Byte[] receiveBytes = udpState.udpClIEnt.EndReceive(iar,ref udpReceiveState.ipEndPoint);                string receiveString = EnCoding.Unicode.GetString(receiveBytes);                Console.Writeline("Received: {0}",receiveString);                receiveDone.Set();            }                   }                  public static voID Main()        {            AsyncUdpClIEnt auc = new AsyncUdpClIEnt();            auc.SendMsg();            Console.Read();        }    }}

以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

总结

以上是内存溢出为你收集整理的C# 通过UDP进行异步通信的实例代码全部内容,希望文章能够帮你解决C# 通过UDP进行异步通信的实例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1238055.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存