【问题标题】:Getting error non-blocking (10035) error when trying to connect to server尝试连接到服务器时出现错误非阻塞 (10035) 错误
【发布时间】: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


【解决方案1】:

首先,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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2021-03-26
    • 2012-10-04
    相关资源
    最近更新 更多