关于基于UDP协议的编程,请大家来看看。

wsmall1 2004-11-17 02:26:16
我做了一个基于UDP协议程序,一个广播式的发送消息,一个接送消息,利用UDP协议的不用相互之间产生连接的特点。

发送消息端(在此之列出关键方法):
private static void Send(String message)
{
UdpClient sender = new UdpClient();
IPEndPoint groupEP = new IPEndPoint(GroupAddress,GroupPort);

try
{
byte[] bytes = Encoding.ASCII.GetBytes(message);
i = sender.Send(bytes, bytes.Length, groupEP);
sender.Close();
}
catch (Exception e)
{
MessageBox.Show(e.Message.ToString());
}

}

发送端运行正常,没有问题,我利用时钟控件控制发送,每5秒发送一次。
调用方式为: Send("Hello");

我的接收端,因为不能和发送端建立连接,所以采用加入广播的方式来接收。接收方法如下:

private static void StartListener()
{
bool done = false;
UdpClient listener = new UdpClient();
IPEndPoint groupEP = new IPEndPoint(GroupAddress,GroupPort);
try
{
listener.JoinMulticastGroup(GroupAddress);
listener.Connect(groupEP);
while (!done)
{
byte [] bytes = listener.Receive(ref groupEP);
}
listener.Close();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}

当接收端程序运行到 byte [] bytes = listener.Receive( ref groupEP); 这一句的时候,程序就死掉了,请问是怎么回事?
...全文
147 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsmall1 2004-11-17
  • 打赏
  • 举报
回复
我明白了,请问一下,我一个局域网中,要从一个网关里面取得数据,我知道它的IP和端口,可以确定他的数据肯定广播的形式发送的,那我应该怎么做呢?
是不是要用到UDPClient的JoinMulticastGroup()方法,如果这样,我是不是还应该知道网关机中对外发送消息的程序是向哪个IP地址组发送的?非常感谢。
jlhx_NET 2004-11-17
  • 打赏
  • 举报
回复
总之,byte [] bytes = listener.Receive(ref groupEP);接收数据应该写在另一个线程里头,如果放在主线程,在没有数据到来的时候肯定阻塞,导致主线程里的其他代码也无法执行了。
jlhx_NET 2004-11-17
  • 打赏
  • 举报
回复
楼主肯定没写过网络程序,这不是死掉了,是阻塞等待数据,如果没有收到数据的话,还会继续阻塞,直到收到数据为止。因此一般接收监听代码都要单独放在一个线程,而不和主线程写在一起。
wsmall1 2004-11-17
  • 打赏
  • 举报
回复
有人知道么?

110,537

社区成员

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

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

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