Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.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
Python 是否有任何方法可以使用套接字在UDP上相对快速地发送大量数据(约10000字节)?_Python_Sockets - Fatal编程技术网

Python 是否有任何方法可以使用套接字在UDP上相对快速地发送大量数据(约10000字节)?

Python 是否有任何方法可以使用套接字在UDP上相对快速地发送大量数据(约10000字节)?,python,sockets,Python,Sockets,有没有相对快速地发送大量数据(大约10000字节)的方法?我目前正在使用socket.recvfrom,接收每条消息大约需要一分钟。 编辑:这是我恢复消息的方式,sock是UDP套接字,最大缓冲区从1024开始 while True: try: data, addr = sock.recvfrom(max_buffer) # buffer print(data) break except OSError:

有没有相对快速地发送大量数据(大约10000字节)的方法?我目前正在使用socket.recvfrom,接收每条消息大约需要一分钟。 编辑:这是我恢复消息的方式,sock是UDP套接字,最大缓冲区从1024开始

 while True:
     try:
         data, addr = sock.recvfrom(max_buffer) # buffer 
         print(data)
         break
     except OSError:
         max_buffer *= 2
 data = json.loads(data)
我不打算粘贴获取消息的代码,因为它相当长,但它是一个json字典,总共需要大约10000字节。我是这样发送的:

sock.sendto(json.dumps(data).encode(), address)
我反复向服务器发送消息

有没有相对快速地发送大量数据(大约10000字节)的方法

可以,使用
socket.sendto()
。以下是一个示例客户端:

import socket
import datetime

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
data = bytes(i%256 for i in range(10000))
print(datetime.datetime.now())
s.sendto(data, ('localhost', 5000))
print(datetime.datetime.now())
请注意,它创建了一个10000字节的
bytes
对象,并通过一次调用将其传递给
s.sendto()

使用此服务器:

import socket
import datetime

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('localhost', 5000))
data, addr = s.recvfrom(100*1024)
print(datetime.datetime.now())
我从客户那里得到了这个结果:

2018-06-19 13:36:13.443418
2018-06-19 13:36:13.443636
我从服务器获得了以下结果:

2018-06-19 13:36:13.443666

因此,调用
sendto()
大约需要2/10000秒,数据到达的时间不到1/10000秒。

您通过什么媒体发送数据包?以太网?无线上网?拨号调制解调器?这里和那里之间有多少跳?我预计10K字节的传输速度将比1秒快得多,更不用说1分钟了。你是如何测量时间的?张贴你的代码。没有理由需要一分钟来发送10KB。我将它发送到我自己的计算机。你给了我答案。我启动的max_缓冲区太低,所以它需要很长时间才能达到可以接收数据包的大小。谢谢@Gderu—您可能会发现这一点很有趣:特别是,“使用一个足够大的缓冲区来容纳应用程序级协议所发送的最大数据包”。