【问题标题】:Why do I have to restart the tcp_server program once it receives the data?为什么 tcp_server 程序收到数据后必须重新启动它?
【发布时间】:2014-09-18 14:53:24
【问题描述】:

我在 python 中使用了一个简单的 tcp_server。这是代码:-

import socket

TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
#inputs = [conn, serial_obj]
outputs = []
#read_input.read_input(inputs,outputs)
while 1:
    data = conn.recv(BUFFER_SIZE)
    if not data: break
    print "received data:", data
    conn.send(data)

conn.close()

我的问题是一旦它接收到数据,连接就会断开,我必须重新运行 tcp_server 程序来启动连接。我如何让它永远听下去。

【问题讨论】:

  • 您永远不会接受新的连接。您接受一个连接,然后从中读取。
  • 对不起,我的意思是当我收到数据时,连接断开了。要再次从同一连接接收数据,我必须重新启动程序。我怎样才能让它永远听下去。谢谢
  • 您将每 1024 个字节接收一次。
  • 好的。取点。但是,如果我想一次又一次地接收 1024 个字节怎么办。
  • 您的代码,如所写,将接收与您在一个连接上发送它一样多的块(每个最多 1024 个字节),但它只会接受一个连接。从您的 cmets 看来,您的客户端代码每次连接尝试只发送一个块。您能否包含一个客户端程序,以便我们就您的整个系统为您提供建议?

标签: python tcp python-sockets


【解决方案1】:

您需要两个嵌套的 while 循环。外部循环永远运行,每个传入连接一次。内部循环根据它在当前连接上接收到的数据运行。试试这个:

import socket

TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

while True:
    conn, addr = s.accept()
    #inputs = [conn, serial_obj]
    outputs = []
    #read_input.read_input(inputs,outputs)
    while 1:
        data = conn.recv(BUFFER_SIZE)
        if not data: break
        print "received data:", data
        conn.send(data)
    conn.close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 2016-05-16
    相关资源
    最近更新 更多