我這里有這個 python 服務器代碼,它正在等待從 python 客戶端接收訊息摘要和加密訊息。
客戶端套接字:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s=socket.socket()
s.connect((HOST, PORT))
s.sendall(transmit)
服務器端:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
print("\n Server is listing on port :", PORT, "\n")
fragments = []
#Execution stops here
with conn:
print(f"Connected by {addr}")
while True:
chunk = s.recv(4096)
if not chunk:
break
fragments.append(chunk)
arr = 'b'.join(fragments)
#Test to see if the array was being populated
print(arr[0])
我已經嘗試過這個 stackOF 在這里發布的方法,特別是上面提供的串列方法實作,因為我的客戶端正在發送一個資訊“資料包”作為編碼為字串的串列
packet = [signeddigest, ciphertext]
transmit = str(packet)
transmit = transmit.encode()
s.sendall(transmit)
我已經在具有相同 localhost 和埠號的不同服務器代碼庫上測驗了我的客戶端代碼,并且該服務器正在接收資訊,所以我在服務器端缺少一些東西。
測驗服務器的輸出是
File [b'HT\xb0\x00~f\xde\xc8G)\xaf*\xcc\x90\xac\xca\x124\x7f\xa0\xaa\ requested from ('127.0.0.1', 49817)
該“檔案”是從我的客戶端發送到測驗服務器的編碼字串。所以我確信我的服務器實作有問題。
更多資訊:當我運行它監聽的服務器時,我運行客戶端。
python ClientTest.py 請輸入要發送的訊息
然后服務器端立即關閉連接
第 23 行,在 chunk = s.recv(4096) OSError: [WinError 10057] 不允許發送或接收資料的請求,因為套接字未連接并且(當使用 sendto 呼叫在資料報套接字上發送時)沒有提供地址
uj5u.com熱心網友回復:
您的代碼中有許多不一致之處:
while True:
chunk = s.recv(4096) # should be conn.recv(4096)
if not chunk:
break
fragments.append(chunk) # misaligned: you only append the empty chunk
arr = 'b'.join(fragments) # 'b' is an unicode string. You want b''
將其修復為:
while True:
chunk = conn.recv(4096)
if not chunk:
break
fragments.append(chunk)
arr = b''.join(fragments)
arr一旦客戶端在其套接字一側使用關閉或關閉,將立即接收發送的資料。
uj5u.com熱心網友回復:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
conn是連接的套接字,s是偵聽器套接字。
chunk = s.recv(4096)
您得到的錯誤是因為您試圖從偵聽器套接字讀取s,而不是從連接的套接字讀取conn:
第 23 行,在chunk = s.recv(4096) ... 發送或接收資料的請求被禁止,因為套接字未連接...
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/529645.html
