无法连接不同计算机上的Python套接字
问题描述:
我最近为Python中的一个小型聊天程序编写了代码。当我将它们连接到同一系统上的不同终端时,套接字连接良好。但是,当我通过同一个Wifi网络连接的不同计算机连接它们时,似乎也不会发生这种情况。无法连接不同计算机上的Python套接字
这里的服务器代码:
#!/usr/bin/env python
print "-"*60
print "WELCOME TO DYNASOCKET"
print "-"*60
import socket, os, sys, select
host = "192.168.1.101"
port = 8888
connlist = []
try:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print "Socket Successfully Created."
connlist.append(s)
s.bind((host,port))
print "Socket Successfully Binded."
s.listen(10)
print "Socket is Now Listening."
except Exception, e:
print "Error : " + str(e)
sys.exit()
def air(sock,message):
for socket in connlist:
if socket != sock and socket != s:
try:
socket.sendall(message)
except:
connlist.remove(socket)
while 1:
read_sockets,write_sockets,error_sockets = select.select(connlist,[],[])
for sock in read_sockets:
if sock == s:
conn, addr = s.accept()
connlist.append(conn)
print "Connected With " + addr[0] + " : " + str(addr[1])
else:
try:
key = conn.recv(1024)
print "<" + str(addr[1]) + ">" + key
data = raw_input("Server : ")
conn.sendall(data + "\n")
air(sock, "<" + str(sock.getpeername()) + ">" + key)
except:
connlist.remove(sock)
print "Connection Lost With : " + str(addr[1])
conn.close()
s.close()
这里的客户端脚本:
#!/usr/bin/env python
print "-"*60
print "WELCOME TO DYNASOCKET"
print "-"*60
import socket, os, sys
host = "192.168.1.101"
port = 8888
try:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print "Socket Successfully Created."
s.connect((host,port))
print "Connected With " + host + " : " + str(port)
except socket.error, e:
print "Error : " + str(e)
while 1:
reply = raw_input("Client : ")
s.send(reply)
message = s.recv(1024)
print "Server : " + message
s.close()
当我尝试连接的客户端从不同的电脑我得到这个错误:
Error : [Errno 10060] A Connection attempt failed because the connected party
did not respond after a period of time, or established connection failed
because connected host has failed to respnd.
答
您的服务器仅绑定到本地主机,以阻止来自其他主机的连接。
尝试:
s.bind(("0.0.0.0",port))
+0
更改主机为“0.0.0.0”,但仍显示相同的错误。:( – 2014-08-30 17:28:42
不是真的具体到蟒蛇。你确定你没有防火墙阻止流量? – Cld 2014-08-30 16:30:07
通常会出现这样的问题,因为路由器没有像您期望的那样路由某些(大部分)端口。如果将端口号设置为80(HTTP端口)并再次尝试,它是否仍然失败?我还假设你在那里指定的“主机”计算机上运行服务器,而不是试图将客户机连接到错误的地址。 – Anthony 2014-08-30 16:30:16
我不认为防火墙阻止了任何流量。我也尝试将端口更改为80.但它仍显示相同的错误。 :( – 2014-08-30 17:32:48