重复使用相同的套接字发送和接收(Python)
我编写了一个使用Python套接字模块发送和接收消息的简单脚本。我想先使用sendMsg发送消息,然后使用listen接收响应。sendMsg工作正常,但当我的服务器发送响应时,我收到错误: [WinError 10038]尝试对非套接字的对象执行操作 我在sendMsg中关闭套接字连接,然后尝试在listen中绑定它,但是在这一行产生了错误。请有人告诉我我做错了什么重复使用相同的套接字发送和接收(Python),python,sockets,port,bind,listen,Python,Sockets,Port,Bind,Listen,我编写了一个使用Python套接字模块发送和接收消息的简单脚本。我想先使用sendMsg发送消息,然后使用listen接收响应。sendMsg工作正常,但当我的服务器发送响应时,我收到错误: [WinError 10038]尝试对非套接字的对象执行操作 我在sendMsg中关闭套接字连接,然后尝试在listen中绑定它,但是在这一行产生了错误。请有人告诉我我做错了什么 import socket port = 3400 s = socket.socket(socket.AF_INET, soc
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、 setsockoptsocket.SOL_插座,插座.SO_REUSEADDR,3
在s.bind和s.connect之前。这样行。不过,将所有这些都放在一个客户端中会很好。根据文档,将关闭套接字,并且不允许对其进行进一步的操作
因此,在您的代码中,这一行s.close正在关闭套接字
因此,s.bind端口将无法工作,因为套接字s已关闭 我明白了,谢谢。问题是我得到[WinError 10022]一个在s.bind提供的无效参数。我尝试使用s.setsockoptsocket.SOL_SOCKET,SOCKET.SO_REUSEADDR,3来允许在没有运气的情况下重用。在s.bind之前尝试s=SOCKET.socketsocket.AF_INET,SOCKET.SOCK_流。是的,我认为这已经解决了它!谢谢你的帮助