Python的P2P Socket的聊天脚本使用套接字只对一个P2P聊天程序家庭网络(不是学校网络上)
问题描述:
我有以下的python脚本(有点低效的,我知道)工作:Python的P2P Socket的聊天脚本使用套接字只对一个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地址。
在学校网络上,有172个IP地址,它似乎不起作用。没有连接错误,但消息不会被发送或接收,除了在具有相同内部IP地址的同一台计算机上运行的应用程序有两个实例,在这种情况下该程序完美无缺。
我对套接字和这种网络非常陌生,所以我想知道是否有人可以指出为什么是这种情况。例如,可能是IP地址的差异?
预先感谢您。
答
我看到您正在连接端口23647 - 您的学校网络上可能无法访问此端口。检查此端口是否启用流量。详情请参阅:Port Forwarding。
类似于:this site/tool可能允许您快速检查。
谢谢,但整个事情都在一个网络内部,所以它应该无关紧要,如果端口转发或不应该,或者它应该? – abcbabcba 2014-10-02 16:19:50
我认为你可能是正确的 - 但是,它可能是你试图通信的端口明确被你的学校网络的防火墙阻止。至少值得一检查。 – 2014-10-02 16:29:17
啊哈。我认为他们可能只允许某些端口(例如80),所以我会尝试使用它们。 – abcbabcba 2014-10-02 16:29:51