日期:2014-05-18  浏览次数:21142 次

UDP ,开线程接受,线程只接受一次,咋回事?
UDP的服务器端,用网络调试助手,IP 为 192.168.7.23,,端口:1969


本地,接受的IP 是 :192.168.7.23,,,端口:5000

C# code
public void udpSendCommands2(string IP, int Port, byte[] Cmd, int len)
        {
            udp.Connect(IP, Port);
            udp.Send(Cmd, len);            
        }




// 发送命令,并开启接受线程

C# code

private void button2_Click(object sender, EventArgs e)
        {
            ul.udpSendCommands2(ip,port,cmd,len)

try
            {
                startServer = new Thread(new ThreadStart(startUdpServer));

                startServer.Start();
            }
            catch (ThreadAbortException)
            {
                MessageBox.Show("error");
            }       
}




// 线程只接受了一次,就不接受了
 而我服务器端,是一直定时,向 5000 端口传送数据包的。

C# code
 public void startUdpServer()
        {
            byte[]buffer= new byte[1024];
            buffer = UdpReceiveData(ip, port);
                //显示buffer从0到len的内容
            if (buffer[0] == 0xf0)
            {
                dosomething(buffer);
            } 
               
        }



C# code

public byte[] UdpReceiveData(string IP, int Port)
        { 
            udpIpadr = new IPEndPoint(IP, Port);
            return udp.Receive(ref udpIpadr); 
        }




 是什么问题呢?




------解决方案--------------------
public void startUdpServer()
{
while(true){
byte[]buffer= new byte[1024];
buffer = UdpReceiveData(ip, port);
//显示buffer从0到len的内容
if (buffer[0] == 0xf0)
{
dosomething(buffer);

}
}


???这样?
------解决方案--------------------
你的线程只接收了一次啊。。。。

线程不能退出,要一直运行着才能持续接收,建议你采用udp的异步操作模式。

你这代码看得我想哭了。。。。。。。
------解决方案--------------------
线程里面的代码要循环一下吧
------解决方案--------------------
放在循环体里,
有消息就接收
这样写当然只收一次
------解决方案--------------------
receive 放到 while里