2014-07-27 38 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() 
相關問題