C# Windows服务 UDP通信
我写了一个udp通信的程序,在UDPServer类中有接收方法,在主程序中创建对象调用方法,程序执行后能够正长和客户端通信,但是我把他封装成服务时,只能发数据,不能接收数据。我使用WireShark抓包能够抓到客户端发过来的数据包,这说明是服务端的接收数据包的函数没被调用,不明白是怎么回事,请求帮助。
UDPServer类
#region 接收UDP客户端发来的信息
public void ReceiveDataUDPServer()
{//接收从UDP通信客户端发来的信息
int MyPort = 8800;
string MyInfo="";
string MyIP="";
byte[] MyData= new byte[300];
datagram = new Datagram();
MyServer = new UdpClient(8800);
while (true)
{
Debug.WriteLine("Begin receive!");
try
{
Debug.WriteLine("Begin receive!");
IPEndPoint MyRemoteEndPoint = null;
MyData= MyServer.Receive(ref MyRemoteEndPoint);
MyInfo = System.Text.Encoding.Default.GetString(MyData);
MyIP = MyRemoteEndPoint.Address.ToString();
Debug.WriteLine(MyIP+":"+MyPort);
Debug.WriteLine("data:"+MyInfo);
}
catch (Exception ex)
{
// Debug.WriteLine("cuo");
Debug.WriteLine(ex.Message);
}
}
}
public void Receive()
{//创建UDP通信服务端接收信息
IPHostEntry hostName = Dns.GetHostEntry(Dns.GetHostName());
string MyIP = hostName.AddressList[0].ToString();
int MyPort = 8800;
IPEndPoint MyRemoteEndPoint = new IPEndPoint(IPAddress.Parse(MyIP), MyPort);
MyThread = new System.Threading.Thread(new ThreadStart(this.ReceiveDataUDPServer));
MyThread.IsBackground = true;
MyThread.Start();
}
#endregion
客户端的发送方法:
#region 发送数据到UDP客户端
public static void Send(byte[] MyData, string MyIP, int MyPort)
{//消息发送方法
Debug.WriteLine("The Client ip is :"+MyIP);
IPEndPoint MyRemoteEndPoint = new IPEndPoint(IPAddress.Parse(MyIP), MyPort);
UdpClient MyClient = new UdpClient();
MyClient.Send(MyData, MyData.Length, MyRemoteEndPoint);
Debug.WriteLine("After send datas!");
}
#endregion
}
服务启动时调用UDPServer的接收方法
protected override void OnStart(string[] args)
{
UDPServer udp = new UDPServer();
udp.Receive();
}