Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UDP始终在后台通过LAN侦听_C#_Udp_Lan - Fatal编程技术网

C# UDP始终在后台通过LAN侦听

C# UDP始终在后台通过LAN侦听,c#,udp,lan,C#,Udp,Lan,我正在尝试通过局域网使用UDP,正如您在这里看到的,我用一台电脑向另一台电脑发送一个包,但是否可以在您仍在列表时发送包,因为当我开始接收时,进程停止响应。 我知道这与线程有关,但我需要一些帮助。 我感谢所有的帮助,提前谢谢 UdpClient client = new UdpClient(); public void SendPacket() { byte[] packet = Encoding.ASCII.GetBytes(DateTime.Now.ToString("HH:mm:s

我正在尝试通过局域网使用UDP,正如您在这里看到的,我用一台电脑向另一台电脑发送一个包,但是否可以在您仍在列表时发送包,因为当我开始接收时,进程停止响应。 我知道这与线程有关,但我需要一些帮助。 我感谢所有的帮助,提前谢谢

UdpClient client = new UdpClient();

public void SendPacket()
{
    byte[] packet = Encoding.ASCII.GetBytes(DateTime.Now.ToString("HH:mm:ss:ff"));
    client.Send(packet, packet.Length, tbIP.Text, 444);
    dgvSend.Rows.Add(DateTime.Now.ToString("HH:mm:ss:ff"));
}

public void ReceivePacket()
{
    client = new UdpClient(444);
    IPEndPoint server = new IPEndPoint(IPAddress.Any, 0);
    byte[] packet = client.Receive(ref server);
    dgvReceiv.Rows.Add(Encoding.ASCII.GetString(packet), DateTime.Now.ToString("HH:mm:ss:ff"));
}

一旦你
收到
某样东西,你就需要启动另一个
接收
,以便从其他人那里收到某样东西

如果希望接收多个连接,通常会使用异步IO。例如:

var client = new UdpClient(endPoint);
AsyncCallback callback = null;
callback = ar =>
            {
            IPEndPoint newIncomingEndPoint = endPoint;
            byte[] data = client.EndReceive(ar, ref newIncomingEndPoint);
            client.BeginReceive(callback, null);
                        // TODO: do something with data
            };
client.BeginReceive(callback, null);
或者,如果您对不使用匿名方法的内容比较满意(来自):


如果不使用异步IO,在处理现有的
receive
时,您将无法接收另一个连接,因此您在时间上有一个巨大的缺口,想要连接的东西可能会被拒绝。

一旦
接收到
东西,您就需要启动另一个
接收
,以便从中接收到东西其他人

如果希望接收多个连接,通常会使用异步IO。例如:

var client = new UdpClient(endPoint);
AsyncCallback callback = null;
callback = ar =>
            {
            IPEndPoint newIncomingEndPoint = endPoint;
            byte[] data = client.EndReceive(ar, ref newIncomingEndPoint);
            client.BeginReceive(callback, null);
                        // TODO: do something with data
            };
client.BeginReceive(callback, null);
或者,如果您对不使用匿名方法的内容比较满意(来自):


如果不使用异步IO,在处理现有的
receive
时,您将无法接收另一个连接,因此您在时间上有一个巨大的差距,希望连接的内容可能会被拒绝。

您好,我以前看过这段代码,但我仍然不太明白,因为您仍然需要等待接收内容才能发送。我的意思是边听边发。仅供参考,代码不完整,因为没有UdpState类,谢谢你,你不是真的听,你只是收到。使用
Receive
您必须在接收之前发送,使用
BeginReceive
您可以在向刚刚向您发送内容的人发送响应时启动另一次接收。您好,我以前见过此代码,但我仍然不太明白,因为您仍然需要等待接收内容才能发送。我的意思是边听边发。仅供参考,代码不完整,因为没有UdpState类,谢谢你,你不是真的听,你只是收到。使用
Receive
您必须在接收之前发送,使用
BeginReceive
您可以在向刚刚向您发送内容的人发送响应时启动另一次接收。