C#UDP求助
请问怎么让收到字符1重新延迟或计时,就是 System.Threading.Thread.Sleep(5000);没有执行完又收到一个字符1,后面代码不执行, System.Threading.Thread.Sleep(5000); 重新计时:loveliness:static void Main(string[] args){
int recv;
byte[] revData = new byte;
byte[] sendData = new byte;
IPEndPoint ip = new IPEndPoint(IPAddress.Any, 8421);
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
newsock.Bind(ip);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)(sender);
while (true)
{
sendData = new byte;
recv = newsock.ReceiveFrom(sendData, ref Remote);
string recvData = string.Format(Encoding.Default.GetString(sendData, 0, recv));
//收到字符1发送给客户端
if ("1".Equals(recvData))
{
UdpClient dqkUdp = new UdpClient(0);
//数据men
byte[] men = { 0xCA, 0x20, 0xF0, 0x18, 0x02, 0x03, 0x00, 0xAC };
dqkUdp.Connect("192.168.xxx.xxx", xxxx);
//延迟5秒(计时)
System.Threading.Thread.Sleep(5000);
dqkUdp.Send(men, men.Length);
dqkUdp.Close();
}
}
} 加一个lock进去休眠前的时候先lock sapoiuyt 发表于 2019-8-5 10:57
加一个lock进去休眠前的时候先lock
谢谢,好的下午试试 sapoiuyt 发表于 2019-8-5 10:57
加一个lock进去休眠前的时候先lock
加锁是同步,我的意思是延迟没有执行完又收到字符1,然后重新执行if里面的代码 本帖最后由 cxx313120919 于 2019-8-5 23:58 编辑
你可以
1、 Socket 的异步接收数据
2、还有你这个 程序就是单线程的你只能 等if里面运行完了 才能继续 while
所以 你弄个多线程就好在接收到数据为1的时候就开启线程就好了
这样if 里面的东西也会继续接收数据也会继续
具体的异步方法和 多线程 自己百度
还有 就是 如果不是 特别的话 就不要用 socket用 tcp类 和udp类
也就是
TcpListener TcpClient
UdpClient cxx313120919 发表于 2019-8-5 23:56
你可以
1、 Socket 的异步接收数据
2、还有你这个 程序就是单线程的你只能 等if里面运行完了 才能继续...
谢谢,我在改改{:1_893:} cxx313120919 发表于 2019-8-5 23:56
你可以
1、 Socket 的异步接收数据
2、还有你这个 程序就是单线程的你只能 等if里面运行完了 才能继续...
再次感谢,可以了:lol ITgod 发表于 2019-8-6 09:15
再次感谢,可以了
才开始 是这样的
加油吧骚年
页:
[1]