我正在尝试编写代码,使得客户端连接到服务器的默认端口号。然后,服务器向客户端发送另一个端口号。现在,客户端将连接到新的端口号。
客户端:
当我执行这段代码时,客户端和服务器端都出现了以下错误。
服务器端:
客户端:
import socket
import sys
import os
import signal
import time
s = socket.socket()
s.connect(("127.0.0.1", 6667))
line = s.recv(1024)
if line.strip():
port = int(line)
s.close()
soc = socket.socket()
soc.connect(("127.0.0.1", port))
print soc.recv(1024)
soc.close()
else:
s.close()
服务器:
import socket
import sys
import os
import signal
import time
port = 7777
s = socket.socket()
s.bind(("127.0.0.1", 6667))
s.listen(0)
sc, address = s.accept()
print address
sc.send(str(port))
sc.close()
s.close()
sock = socket.socket()
sock.bind(("127.0.0.1", port))
soc, addr = sock.accept()
print addr
soc.send("Success")
soc.close()
sock.close()
当我执行这段代码时,客户端和服务器端都出现了以下错误。
服务器端:
('127.0.0.1', 36282)
Traceback (most recent call last):
File "server.py", line 17, in <module>
soc, addr = sock.accept()
File "/usr/lib/python2.7/socket.py", line 202, in accept
sock, addr = self._sock.accept()
socket.error: [Errno 22] Invalid argument
客户端:
Traceback (most recent call last):
File "client.py", line 13, in <module>
soc.connect(("127.0.0.1", port))
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 111] Connection refused
有人能够解释这些错误的原因并提供这些错误的解决方案吗?
sock.bind(("127.0.0.1", port))
之后,您似乎遗漏了sock.listen(0)
。另外,请考虑一下如果在服务器开始监听连接之前,客户端收到端口号并尝试连接会发生什么。 - Michael Petchs
、sc
、sock
等,特别是如果你会在这里发布代码。 - wenzul