【问题标题】:improving the speed of socket transfer提高套接字传输的速度
【发布时间】:2019-03-19 08:17:59
【问题描述】:

我正在尝试使用 python 中的套接字库将数据从 Windows PC(客户端)传输到 linux PC(服务器)。

我有以下服务器和客户端的代码:

客户:

我的主程序使用以下函数发送数据。例如 send_message(data.encode());其中“数据”每秒都在变化,并且是 int 格式。

def send_message(message):

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # Connect the socket to the port on the server
    # given by the caller
    server_address = ('10.46.24.858' 10000)
    #print('connecting to {} port {}'.format(*server_address))
    sock.connect(server_address)    
    sock.sendall(message)   
    print(message)

服务器:

def main():
 sock= socket.socket.AF_INET,socket.SOCK_STREAM)
 server_address = ('10.46.24.858', 10000)
 sock.bind(server_address)
 sock.listen(1)
 while True:
     connection,clientaddress = sock.accept()
     data = connection.recv(16)
     print('recieved,%s',data)

if __name__ == "__main__":
 main()

客户端函数 send_message() 被我的主程序用来发送每秒不断变化的数据。但是使用当前代码,数据传输的速度非常低,因此大多数数据都没有传输/跳过。有什么办法可以提高传输速度?我真的要以更快的速度发送数据。是我遗漏了什么还是我的代码有问题?

EDIT-1 按照@JohanL 的建议,我没有在每次想要传输数据时都创建一个新的连接,而是保留了一个 Open 套接字。这确实提高了速度,但我真的需要它接近瞬时。

新客户代码:

def main(): 
   sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # Connect the socket to the port on the server
    # given by the caller
    server_address = ('10.46.24.858' 10000)
    #print('connecting to {} port {}'.format(*server_address))
    sock.connect(server_address

   # some algorithm with outputs 'data'
     sock.sendall(data.encode())

【问题讨论】:

  • server_address = ('10.46.24.858' 10000) 应该是 server_address = ('10.46.24.858', 10000) 吗?
  • 如果你有连续的数据传输,为什么不保持一个打开的套接字,而是为每次传输建立一个新的连接?
  • 是的,我可以传输数据,但比要求的要慢得多
  • @JohanL 哦。没想到。我会尝试保持一个开放的套接字。
  • @JohanL - 虽然保持打开的套接字确实提高了速度,但我仍然需要接近瞬时传输。有没有其他办法?

标签: python linux windows visual-studio sockets


【解决方案1】:

把袜子换成:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

成功了。谢谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 2012-11-19
    • 1970-01-01
    • 2021-12-23
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多