我正在尝试简单地将列表从一台计算机发送到另一台计算机。
我在一台计算机上设置了服务器,其中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。但是,我不明白为什么我得到的错误是关于非阻塞的。
我做错了什么,导致我无法发送数据?
发布于 2019-10-10 18:03:30
首先,user207421建议将超时更改为更长的持续时间。
此外,正如这里所述,Socket Programming in Python raising error socket.error:< [Errno 10060] A connection attempt failed我正在尝试运行我的服务器并连接到一个私有IP地址。
解决方法是:在服务器端,在s.bind中,将主机部分保留为空
HOST = ''
PORT = 65432
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))在客户端,使用运行服务器的PC的公网IP (我从ip4.me获得)
HOST = 'THE PUBLIC IP' #not going to write it
PORT = 65432
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, PORT))https://stackoverflow.com/questions/58318272
复制相似问题