![](/img/trans.png)
[英]How I can to create python(or swift) TCP client for my TCP c# server?
[英]How to create a TCP Server in Python?
我開始學習使用python建立網絡,有人無法幫助我解決這段代碼,因為我一次不能連接5個以上的客戶端。 有人可以建議我解決這個問題嗎?
def main():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', listening_port))
s.listen(5)
print "[*] Initializing Sockets ... Done"
print "[*] Sockets Binded Successfully ..."
print("[*] Server Started Successfully [%d]\n" % (listening_port))
except Exception, e:
print e
sys.exit(2)
while 1:
try:
conn, addr = s.accept()
data = conn.recv(buffer_size)
start_new_thread(conn_string, (conn, data, addr))
except KeyboardInterrupt:
s.close()
print "\n[*] Proxy Server Shutting Down ..."
sys.exit(1)
s.close()
def conn_string(conn, data, addr):
print conn
print addr
print data
如python套接字API中所述:
socket.listen(積壓)
偵聽與套接字的連接。 backlog參數指定排隊連接的最大數量,並且至少應為0;否則為0。 最大值取決於系統(通常為5),最小值強制為0。
將數量從5增加到希望與服務器建立的同時連接數。
接受的答案不正確。 我會盡力向您解釋原因。
listen
接受排隊連接的參數。 這意味着可以將多少個新連接放入隊列。 這就是為什么即使在文檔中也將其指定為5,而顯然服務器通常服務於5個以上的並發客戶端。
創建(接受)套接字后,會將其轉發到另一個線程,該線程將執行實際工作。 這允許listening
線程返回到偵聽模式並等待更多的客戶端。
您的代碼的問題在於,您的主線程(實際上是偵聽線程) 實際上從不應該從buffer讀取數據 。 recv()
函數塊(有關I / O流阻止的更多信息)
您需要將讀取過程從偵聽線程轉移到工作線程; 並確保完成后close()
套接字。 代碼看起來像這樣:
def main():
try:
...
s.listen(5)
except Exception, e:
...
while 1:
try:
conn, addr = s.accept()
start_new_thread(conn_string, (conn, addr))
except KeyboardInterrupt:
s.close()
print "\n[*] Proxy Server Shutting Down ..."
sys.exit(1)
s.close()
def conn_string(conn, addr):
data = conn.recv(buffer_size)
print conn
print addr
print data
conn.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.