2014-07-27 26 views
0

我在Python中使用简单的tcp_server。下面是代码: -为什么一旦接收到数据就必须重新启动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程序启动连接。我如何保持它永远听。

+3

你永远不会接受一个新的连接。您接受一个连接,然后从中读取。 –

+0

对不起,我的意思是当我收到数据时,连接被中断。为了再次接收来自同一连接的数据,我必须重新启动程序。我怎样才能让它听取前程。 THANKs – PythonEnthusiast

+0

您将收到每1024个字节。 –

回答

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() 
相关问题