Python P2P Sockets Chat Script работает только в домашней сети (не в школьной сети)

У меня есть следующий скрипт python (немного неэффективный, я знаю) для программы чата P2P с использованием сокетов:

#!usr/bin/env python import socket import threading import select import time import datetime def main(): class Chat_Server(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.running = 1 self.conn = None self.addr = None def run(self): HOST = '' PORT = 23647 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((HOST,PORT)) s.listen(1) self.conn, self.addr = s.accept() # Select loop for listen while self.running == True: inputready,outputready,exceptready \ = select.select ([self.conn],[self.conn],[]) for input_item in inputready: # Handle sockets message = self.conn.recv(1024) if message: print "Daniel: " + message + ' (' + datetime.datetime.now().strftime('%H:%M:%S') + ')' else: break time.sleep(0) def kill(self): self.running = 0 class Chat_Client(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.host = None self.sock = None self.running = 1 def run(self): PORT = 23647 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.connect((self.host, PORT)) # Select loop for listen while self.running == True: inputready,outputready,exceptready \ = select.select ([self.sock],[self.sock],[]) for input_item in inputready: # Handle sockets message = self.sock.recv(1024) if message: print "Daniel: " + message + ' (' + datetime.datetime.now().strftime('%H:%M:%S') + ')' else: break time.sleep(0) def kill(self): self.running = 0 class Text_Input(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.running = 1 def run(self): while self.running == True: text = raw_input('') try: chat_client.sock.sendall(text) except: Exception try: chat_server.conn.sendall(text) except: Exception time.sleep(0) def kill(self): self.running = 0 # Prompt, object instantiation, and threads start here. ip_addr = raw_input('Type IP address or press enter: ') if ip_addr == '': chat_server = Chat_Server() chat_client = Chat_Client() chat_server.start() text_input = Text_Input() text_input.start() else: chat_server = Chat_Server() chat_client = Chat_Client() chat_client.host = ip_addr text_input = Text_Input() chat_client.start() text_input.start() if __name__ == "__main__": main() 

Этот скрипт отлично работает в домашней сети с 192.168 … внутренними IP-адресами.

  • Сервер Twisted Framework делает подключения в качестве клиента?
  • Отправка строки через сокет (python)
  • Который является большими накладными расходами: каждый раз создавайте новый сокет или поддерживая один сокет для передачи данных
  • (Очень) базовый пример сокета клиента Python
  • Сервер сокета Python: отклонить соединение с адреса
  • Python Sockets: включение режима Promiscuous в Linux
  • В школьной сети, где 172 … IP-адреса, похоже, не работает. Ошибка соединения отсутствует, но сообщения не отправляются и не принимаются, за исключением случаев, когда два экземпляра приложения запускаются на том же компьютере с одним и тем же внутренним IP-адресом, и в этом случае программа работает безупречно.

    Я очень новичок в сокетах и ​​подобных сетях, поэтому мне интересно, может ли кто-нибудь указать мне, почему это так. Может быть, это разница в IP-адресах, например?

    Заранее спасибо.

  • Как получить порты, которые прослушивает процесс?
  • Буферизация сокетов Python
  • Twisted - отправка данных выбранным клиентам
  • Как поймать это исключение Python: ошибка: Существующее соединение было принудительно закрыто удаленным хостом
  • «Соединение было сброшено» в веб-браузерах при попытке подключения к серверу сокетов localhost
  • Отправка сброса в разъеме TCP / IP
  • One Solution collect form web for “Python P2P Sockets Chat Script работает только в домашней сети (не в школьной сети)”

    Я вижу, что вы подключаетесь к порту 23647 – у вас может не быть доступа к этому в вашей школьной сети. Проверьте, включен ли этот порт. см. « Переадресация портов» для получения более подробной информации.

    Что-то вроде: этот сайт / инструмент может позволить вам быстро проверить.

    Python - лучший язык программирования в мире.