В настоящее время я создаю сеть, и всякий раз, когда я пытаюсь соединить два моих устройства в школьной сети, устройства отказываются соединяться друг с другом. Однако я использую ту же самую программу в моей домашней сети, и она прекрасно подключается. Я не уверен, почему возникает проблема, и я искал решение по всему Интернету, но не смог найти.
Сначала я думал, что ошибка была результатом медленного интернет-соединения в моей школьной сети, поэтому я попытался включить цикл while вокруг частей, которые отвечали за соединение клиента и сервера. Программа не смогла подключиться после нескольких попыток подключения в моей школьной сети. Проблема не в каком-либо из моего кода, потому что я могу выполнить его в своей домашней сети без проблем, так как оба устройства могут подключаться к серверу.
Клиентская программа:
class Network:
def __init__(self):
self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server = 'Insert IPv4 Address Here'
self.port = 5555
self.addr = (self.server, self.port)
def getServer(self):
return self.server
def make_Connection(self):
try:
self.client.connect(self.addr) # Connect the client to the server
return pickle.loads(self.client.recv(2048))
except socket.error as e:
print(e)
def send_and_receive(self, data):
try:
self.client.send(pickle.dumps(data))
return pickle.loads(self.client.recv(2048))
except socket.error as e:
print(e)
### --- Client --- ###
network = Network()
output = network.Make_Connection()
print(output)
output= network.send_and_receive('Hello World')
print(output)
Серверная программа:
from _thread import *
import socket
import pickle
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.bind(('', 5555))
except socket.error as e:
print(e)
s.listen(2)
# functions #
def ThreatedClient(conn, player):
conn.send(pickle.dumps('Connection Established'))
while True:
try:
new_data = pickle.loads(conn.recv(2048))
if not new_data:
print('Disconnected...')
break
else:
if player == 0:
reply = pickle.dumps('This is Player 1')
else:
reply = pickle.dumps('This is Player 2')
conn.sendall(reply) # Send reply to clients
except:
break
print('Connection Lost ... ')
conn.close()
### --- Thread Starts Here --- ###
current_player = 0
while True:
c, address = s.accept() # Accepts connection from client
print('Connected to:', address)
start_new_thread(ThreatedClient, (c, current_player))
current_player += 1
На сервере ожидаемый результат должен быть:
Connected to: ('IPv4 Address', Port)
В клиенте ожидаемый результат должен быть:
Connection Established
This is Player 1
для игрока 1 и:
Connection Established
This is Player 2
для игрока 2.
Когда я запускаю ту же программу в моей школьной сети, вывод будет ошибочным 32: Broken Pipe