首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试连接到服务器时出现非阻塞错误(10035)

问尝试连接到服务器时出现非阻塞错误(10035)
EN

Stack Overflow用户
提问于 2019-10-10 16:12:19
回答 1查看 495关注 0票数 0

我正在尝试简单地将列表从一台计算机发送到另一台计算机。

我在一台计算机上设置了服务器,其中IP地址为192.168.0.101,服务器的代码为:

代码语言:javascript
复制
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

客户端在另一台计算机上。代码:

代码语言:javascript
复制
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。但是,我不明白为什么我得到的错误是关于非阻塞的。

我做错了什么,导致我无法发送数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-10 18:03:30

首先,user207421建议将超时更改为更长的持续时间。

此外,正如这里所述,Socket Programming in Python raising error socket.error:< [Errno 10060] A connection attempt failed我正在尝试运行我的服务器并连接到一个私有IP地址。

解决方法是:在服务器端,在s.bind中,将主机部分保留为空

代码语言:javascript
复制
HOST = ''
PORT = 65432
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))

在客户端,使用运行服务器的PC的公网IP (我从ip4.me获得)

代码语言:javascript
复制
HOST = 'THE PUBLIC IP' #not going to write it
PORT = 65432
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, PORT))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58318272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档