簡體   English   中英

python異步套接字客戶端

[英]python async socket client

我正在嘗試在python中創建套接字客戶端,我可以發送第一條消息,沒有錯誤,但是當我嘗試發送第二條消息時,它停滯了,有人可以為此提供幫助嗎?

import socket , time
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def OpenConnection(IP,PORT):
    global sock    
    sock.connect((IP, PORT))
def SendMessage(StringMessage):
    global sock
    print "Step 1"
    sock.send(StringMessage)
    print "Step 2"
    reply = sock.recv(1024)  # limit reply to 1024K
    print StringMessage
    return reply
def CloseConnection():
    global sock
    sock.close()
HOST, PORT = 'localhost', 34567
OpenConnection(HOST,PORT)
print SendMessage('test1')
print "Sleep for 3"
time.sleep(3)
print "Sendind Second Message.."
print SendMessage('test2')
CloseConnection()

您的代碼對我有用-您正在連接的服務器是否將任何東西發回? 我使用netcat偵聽端口34567。這是第一次運行程序后的服務器輸出:

$ nc -l 34567
test1

這是客戶

$ python socktimeout.py
Step 1
Step 2

此時,客戶sock.recv(1024)sock.recv(1024)調用中等待服務器的響應。 鍵入一條消息(例如“ TEST”)並在服務器窗口中按Enter鍵即可繼續執行代碼。 現在服務器看起來像這樣:

$ nc -l 34567
test1TEST
test2

和客戶:

$ python socktimeout.py
Step 1
Step 2
test1
TEST

Sleep for 3
Sendind Second Message..
Step 1
Step 2

再次輸入消息並按Enter,將允許您的程序完成並關閉連接。

請注意,僅需要按回車鍵,因為netcat正在對輸入進行行緩沖,如果您的服務器正在使用其他進程發送回數據,則不需要在消息末尾附加一行(盡管這可能是一個好主意,具體取決於根據您的協議)。

編輯

這是發送回另一條消息后的最終服務器狀態:

$ nc -l 34567
test1TEST
test2TEST
$

這是客戶:

$ python socktimeout.py
Step 1
Step 2
test1
TEST

Sleep for 3
Sendind Second Message..
Step 1
Step 2
test2
TEST

$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM