Отредактировано снова, чтобы добавить:
Думаю, вам не хватает некоторых основ связи с сокетами. Чтобы сокеты работали, необходимо убедиться, что сокеты на вашем клиенте и сервере будут соответствовать. С последней версией ваш сервер теперь привязан к порту 63001, но на локальном адаптере обратной связи: 127.0.0.1
Компьютеры имеют несколько сетевых адаптеров, по крайней мере, 2: один - локальный шлейф, который позволяет быстро и эффективно выполнять сетевые подключения к одной и той же машине (для тестирования, ipc и т. Д.), И сетевой адаптер, Вы подключаетесь к реальной сети. Многие компьютеры могут иметь гораздо больше адаптеров (виртуальные адаптеры для vlans, беспроводные или проводные адаптеры и т. Д.), Но их будет не менее 2.
Итак, в вашем серверном приложении вы должны указать ему, как привязать сокет к соответствующему сетевому адаптеру.
host = ''
port = 63001
bind(host,port)
То, что это делает в python, привязывает сокет к адаптеру обратной связи (или 127.0.0.1/localhost).
В вашем клиентском приложении у вас есть:
host = '80.xxx.xxx.xxx'
port = 63001
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
Теперь ваш клиент пытается подключиться к сокету к порту 63001 на 80.xxx.xxx.xxx (который является вашим беспроводным интернет-адаптером).
Поскольку ваш сервер прослушивает ваш петлевой адаптер, а ваш клиент пытается подключиться к вашему беспроводному адаптеру, происходит сбой, потому что два конца не сходятся.
Итак, у вас есть два решения:
- Изменить клиента для подключения к localhost с помощью
host = 127.0.0.1
Измените сервер для привязки к вашему интернет-адаптеру, изменив host = 80.xxx.xxx.xxx
Теперь первое решение, использующее localhost, будет работать только тогда, когда ваш сервер и клиент находятся на одном компьютере. Localhost всегда указывает на себя (следовательно, на петлю), независимо от того, какую машину вы пытаетесь. Поэтому, если / когда вы решите подключить ваш клиент / сервер к Интернету, вам нужно будет подключиться к сетевому адаптеру, который находится в Интернете.
Отредактировано, чтобы добавить: **
Хорошо, с вашей последней ревизией, она все равно не будет работать, потому что 65535
является самой большой доступной записью.
Ниже приведен ответ на первоначальный вариант вопроса.
В опубликованном коде вы прослушиваете (привязаны) порт 63001
, но ваше клиентское приложение пытается подключиться к порту 80
. Вот почему ваш клиент не может общаться с вашим сервером. Ваш клиент должен подключиться через порт 63001
, а не порт 80
.
Кроме того, если вы не используете HTTP-сервер (или ваш Python-сервер будет обрабатывать HTTP-запросы), вам не следует связываться с портом 80
.
В вашем клиенте изменение кода:
import socket
host = '80.xxx.xxx.xxx'
port = 63001
И в вашем коде сервера:
import socket
host = ''
port = 63001
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostbyname(socket.gethostname()), port ))