
下面是内存溢出 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进行异步通信的实例代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)