0
我已經編寫了一個簡單的腳本來使用Python套接字模塊發送和接收消息。我想先使用sendMsg
發送消息,然後使用listen
收到回覆。 sendMsg
工作正常,但是當我的服務器發送一個響應我收到錯誤:重複使用相同的套接字發送和接收(Python)
「[WinError 10038]的操作嘗試的東西,不是一個套接字」
我關閉sendMsg
套接字連接,然後嘗試在listen
中綁定它,但是在這條線上產生錯誤。請有人告訴我我做錯了什麼!
import socket
port = 3400
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), port))
def sendMsg():
print("\nSending message:\n\n")
msg = ("Sample text").encode("utf-8")
s.send(msg)
s.close()
def listen():
s.bind(("", port))
s.listen(1)
serverSocket, info = s.accept()
print("Connection from", info, "\n")
while 1:
try:
buf = bytearray(4000)
view = memoryview(buf)
bytes = serverSocket.recv_into(view, 4000)
if bytes:
stx = view[0]
Size = view[1:3]
bSize = Size.tobytes()
nTuple = struct.unpack(">H", bSize)
nSize = nTuple[0]
message = view[0:3+nSize]
messageString = message.tobytes().decode("utf-8").strip()
messageString = messageString.replace("\x00", "")
else:
break
except socket.timeout:
print("Socket timeout.")
break
sendMsg()
listen()
注:我在一個單獨的客戶端實現listen
和所使用的線
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 3)
s.bind()
和s.connect()
之前。這工作正常。儘管在一個客戶端中擁有這一切將會很好。
我明白了,謝謝。然後問題是我得到了「[WinError 10022] s.bind'提供了一個無效的參數。我嘗試使用's.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,3)'在這裏允許重複使用而沒有運氣。 – petehallw
's's之前嘗試s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)'s .bind()'。 –
是的,我認爲這已經修復了!感謝您的幫助 – petehallw