Sal*_*goz 10 c# python sockets ubuntu udp
这些代码通过用户数据报协议提供发送数据.下面有两个代码.当我使用第一个代码来获取无法访问的IP地址时,我得到了三秒钟的延迟.
请查看新结果标题
刚刚打开新的C#CONSOLE APP并将这些代码粘贴在其中.(第一个代码)
using System;
using System.Net;
using System.Net.Sockets;
namespace Test
{
class Program
{
static void Main(string[] args)
{
byte[] data = { 1, 20, 60, 44, 244 };
while (true)
{
Console.WriteLine(DateTime.Now.ToString("h:mm:ss tt"));
try
{
using (var client = new UdpClient())
{
// Please check IP Address, It must be unreachable...
// IPEndPoint ep = new IPEndPoint(IPAddress.Parse("192.168.1.141"), 55600);
// client.Connect(ep);
client.Send(data, data.Length, "192.168.1.141" , 55600);
}
Console.WriteLine(DateTime.Now.ToString("h:mm:ss tt"));
Console.WriteLine(" ");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
试验1(使用):可达IP
试验2(使用):无法到达的IP
输出:
测试1 label1的---> H:mm:ss的LABEL2 ---> H:MM:SS(同一时间)
的Test2 label1的--- > h:mm:ss label2 ---> h:mm:ss +3秒
(无例外)WireShark结果:
测试1(使用):可达的Ip - >数据被捕获,看到.
测试2(使用):无法访问的IP->无数据.当我使用没有"使用"块时,我没有得到三秒钟的延迟.
刚刚打开新的C#CONSOLE APP并将这些代码粘贴在其中.(第二个代码)
using System;
using System.Net;
using System.Net.Sockets;
namespace Test
{
class Program
{
static void Main(string[] args)
{
byte[] data = { 1, 20, 60, 44, 244 };
while (true)
{
Console.WriteLine(DateTime.Now.ToString("h:mm:ss tt"));
try
{
var client = new UdpClient();
//Please check IP address, It must be unreachable...
// IPEndPoint ep = new IPEndPoint(IPAddress.Parse("192.168.1.41"), 5600);
// client.Connect(ep);
client.Send(data, data.Length, "192.168.1.141", 55600);
Console.WriteLine(DateTime.Now.ToString("h:mm:ss tt"));
}
catch (Exception xe)
{
Console.WriteLine(xe.ToString());
}
Console.WriteLine(" ");
System.Threading.Thread.Sleep(1000);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
测试1(不使用):可达的Ip
测试2(不使用):无法到达的Ip输出:
Test1 label1 ---> h:mm:ss(同一时间)label2 ---> h:mm:ss(同一时间)
Test2 label1 ---> h:mm:ss(同一时间)label2 --- > h:mm:ss(同一时间)
(没有例外)WireShark结果:
测试1(不使用):可达的Ip - >数据被捕获,看到.
测试2(不使用):无法访问的IP->无数据.
三秒延迟的意思是什么?
我不确定,但我认为我必须使用"使用"块,因为如果我没有使用块内存使用将增加非常高的阶段.两个代码有什么区别?哪一个更可靠?有没有更好的方法?我不想要三秒钟的延迟.
如何将三秒延迟减少到零?
提前致谢...
新结果
我已尝试使用Windows操作系统中的Python编程语言对无法访问的IP进行套接字关闭/处理.我得到了相同的结果,即无法访问IP的三秒延迟.但是当我在Ubuntu 15.10中尝试相同的Python代码时,我没有得到三秒钟的延迟.
import socket
import datetime
IPADDR = '192.168.1.141'
PORTNUM = 5600
PACKETDATA = "f1a525da11f6".encode()
while(True):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
s.connect((IPADDR, PORTNUM))
s.send(PACKETDATA)
print(datetime.datetime.now())
s.close()
Run Code Online (Sandbox Code Playgroud)
您的 UdpClient 是一次性对象。您应该在重新连接之前将其丢弃。
using (var client = new UdpClient()){
//Please check IP address, It must be unreachable...
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("192.168.1.41"), 5600);
client.Connect(ep);
client.Send(data, data.Length);
}
Run Code Online (Sandbox Code Playgroud)
或者将连接移到循环之外以重用相同的连接。
归档时间: |
|
查看次数: |
780 次 |
最近记录: |