C# Windows服务 UDP通信

klx019 2012-03-28 03:43:07
我写了一个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();
}
...全文
297 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧