首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# ,还是UDP的有关问题,关于UDP常连接有关问题

2012-09-12 
C# ,还是UDP的问题,关于UDP常连接问题请教一个,UDP,是不是常连接的?首先,假设我的PC通过UDP向设备发送命令

C# ,还是UDP的问题,关于UDP常连接问题

请教一个,UDP,是不是常连接的?

 首先,假设我的PC通过UDP向设备发送命令包,是一问一答式

  如下:
  发送一次命令,等待接收并处理 
 

C# code
 udp.Connect(ip, Port);            udp.Send(Cmd , len);            byte[] receive = new byte[256];            return UdpReceiveData(ip, Port);   


 问题1 : 是不是,发送一次发一次,都要在发送时,都需要connect一次远端的设备?

 问题2: 如果我发一个命令,让设备主动向PC发送数据(当发送停止命令,才停止向PC发送数据)
  我是不是开个线程,一直接受就可以了?


   


[解决办法]
1、不用每次都连接,实际上UDP根本不连接也可以。
2、对。
[解决办法]
UDP本身是不需要连接的,.net给UDP套接字提供connect方法,是为了简化收发时的操作。假如本机只接受一个远程UDP套接字发来的数据,并且只发送给那个远程套接字数据,就可以先connect。
正常情况下,应该使用Socket.SendTO来发送,Socket.ReceiveFrom来接收,不需要事先connect。
[解决办法]
同意楼上的。
另在你另一个贴我不是说过了吗,如果要能一直接收到数据,要么采用异步接收(beginReceive),要么自己开线程在循环里接收。

[解决办法]
继续搬上msdn的例子
C# code
public static bool messageReceived = false;public static void ReceiveCallback(IAsyncResult ar){  UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).u;  IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).e;  Byte[] receiveBytes = u.EndReceive(ar, ref e);  string receiveString = Encoding.ASCII.GetString(receiveBytes);  Console.WriteLine("Received: {0}", receiveString);  messageReceived = true;}public static void ReceiveMessages(){  // Receive a message and write it to the console.  IPEndPoint e = new IPEndPoint(IPAddress.Any, listenPort);  UdpClient u = new UdpClient(e);  UdpState s = new UdpState();  s.e = e;  s.u = u;  Console.WriteLine("listening for messages");  u.BeginReceive(new AsyncCallback(ReceiveCallback), s);  // Do some work while we wait for a message. For this example,  // we'll just sleep  while (!messageReceived)  {    Thread.Sleep(100);  }} 

热点排行