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里