国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C# > 正文

C#基于UDP進(jìn)行異步通信的方法

2020-01-24 01:56:55
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了C#基于UDP進(jìn)行異步通信的方法。分享給大家供大家參考。具體如下:

服務(wù)器端:

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}個(gè)UDP請(qǐng)求處理完成!",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}個(gè)請(qǐng)求處理完畢!", 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();  } }}

客戶(hù)端:

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, listenPort);   remoteEP = new IPEndPoint(Dns.GetHostAddresses(Dns.GetHostName())[0],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, SocketType.Dgram, 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, sendBytes.Length, new AsyncCallback(SendCallback), udpSendState);     sendDone.WaitOne();     Thread.Sleep(200);     ReceiveMessages();    }   }      }  public void SendCallback(IAsyncResult iar)  {   UdpState udpState = iar.AsyncState as UdpState;   if (iar.IsCompleted)   {    Console.WriteLine("第{0}個(gè)發(fā)送完畢!", 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();  } }}

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 株洲县| 惠来县| 炉霍县| 鸡泽县| 宜黄县| 泾阳县| 景德镇市| 龙里县| 武义县| 睢宁县| 多伦县| 伊金霍洛旗| 革吉县| 永州市| 菏泽市| 闻喜县| 密云县| 牙克石市| 正蓝旗| 姚安县| 宝坻区| 大连市| 石城县| 会泽县| 偃师市| 武鸣县| 商丘市| 成都市| 罗田县| 平舆县| 内黄县| 琼结县| 黑山县| 墨江| 五寨县| 忻城县| 蒙山县| 巫山县| 汕头市| 赤壁市| 富锦市|