2013-10-21 137 views
1

我正在Python上開發一個TCP客戶端,我有下一個問題。我連接服務器,發送一些數據,它會以預期的數據響應我,但在此之後,我自己的應用程序(客戶端)發送[FIN,ACK](使用wireshark進行檢查)。這是我的客戶端應用程序:客戶端Python關閉我的TCP連接沒有socket.close()

try: 
    sock = socket(AF_INET, SOCK_STREAM) 
    sock.bind((my_ip,my_port)) 
    sock.connect((sendAddress,sendPort)) 
    sock.send(joinRequest) 
    joinResponse = sock.recv(18) 
    print joinResponse 

except socket.timeout: 
    sock.close() 
+0

如果刪除了異常處理socket.timeout會發生什麼? – goncalopp

+0

該代碼收到回覆並將其打印出來。那麼沒有更多的代碼,也許你的應用程序結束了,這將關閉套接字?你想要你的應用程序做什麼? – nos

+0

goncalopp:發生這種情況時,發送ack到服務器後關閉連接。 nos:我想保持TCP連接處於活動狀態,因爲它必須始終收回併發送數據。這是一個P2P應用程序,servent(服務器,我想連接)給我的接受連接網絡,然後,它必須連接所有的時間...我已經嘗試過SO_KEEPALIVE,但我的客戶關閉連接以及... –

回答

1

這是SocketServer的默認行爲,接受連接,獲取請求,然後關閉連接。

簡單的方法將是使用,同時保持它連接環,您還可以使用sock.settimeout調整超時

+0

但問題是,在wireshark我看到第一個[FIN,ACK]是由客戶端發送它,而不是服務器... –

+2

@AlvaroGarciadelaVilla DevC的意思是[FIN, ACK]由客戶端發送,因爲程序終止,所以套接字自動關閉。 – goncalopp