【发布时间】:2019-10-10 08:12:19
【问题描述】:
我试图简单地将列表从一台计算机发送到另一台计算机。
我的服务器设置在一台计算机上,IP 地址为 192.168.0.101 服务端代码:
import socket
import pickle
import time
import errno
HEADERSIZE = 20
HOST = socket.gethostbyname(socket.gethostname())
PORT = 65432
print(HOST)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(10)
while True:
conn, adrs = s.accept()
print(f"Connection with {adrs} has been established")
conn.setblocking(1)
try:
data = conn.recv(HEADERSIZE)
if not data:
print("connection closed")
conn.close()
break
else:
print("Received %d bytes: '%s'" % (len(data), pickle.loads(data)))
except socket.error as e:
if e.args[0] == errno.EWOULDBLOCK:
print('EWOULDBLOCK')
time.sleep(1) # short delay, no tight loops
else:
print(e)
break
客户端在另一台计算机上。代码:
import socket
import pickle
HOST = '192.168.0.101'
PORT = 65432
def send_data(list):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(10)
print(".")
print(s.connect_ex((HOST, PORT)))
print(".")
data = pickle.dumps(list)
print(len(data))
s.send(data)
s.close()
send_data([1,1,1])
connect_ex 输出的错误号是 10035。我读了很多关于这个错误的信息,但我发现的都是关于服务器端的。对我来说,问题似乎出在客户端并且无法连接到 192.168.0.101。但是,我不明白为什么我得到的错误是关于非阻塞的。
我做错了什么无法发送数据?
【问题讨论】:
-
这意味着你的10ms微观超时过期了。尝试一些现实的东西,比如 10s。
-
@user207421 我已按照您的建议将时间更改为 10 秒。现在我得到的错误是 10060,这是连接超时。
标签: python sockets networking