Получение ошибки неблокирования (10035) ошибка при попытке подключения к серверу - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь просто отправить список с одного компьютера на другой.

У меня настроен сервер на одном компьютере, где 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. Но тогда я не понимаю, почему я получаю ошибку о неблокировании.

Что я делаю неправильно, что не могу отправить данные?

1 Ответ

0 голосов
/ 10 октября 2019

Прежде всего, как предложил пользователь 207421, измените тайм-аут на более длительную.

Кроме того, как указано здесь Программирование сокетов в Python, вызывающее ошибку socket.error: <[Errno 10060] Соединениепопытка не удалась </a> Я пытался запустить свой сервер и подключиться к частному IP-адресу.

Исправление: на стороне сервера, в s.bind, оставить часть узла пустой

HOST = ''
PORT = 65432
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))

А на стороне клиента используйте общедоступный 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...