我正在尝试了解套接字编程/网络,并启动并运行基本服务器。不幸的是,我只能从运行服务器的机器连接到它。我使用telnet localhost 9999
从命令提示符连接。这不适用于同一网络上的其他计算机(如在不运行服务器的其他计算机中)。我试过telnet "my local ip" 9999
无济于事,无法在任何地方找到解决方案。任何帮助表示赞赏。我正在运行python 3.6.1
这是我的代码
import socket
import sys
from _thread import *
import webbrowser
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = ""
port = 9999
try:
s.bind((host,port))
except socket.error as e:
print (str(e))
s.listen(5)
def threaded_client(conn):
conn.send(str.encode("welcome, would you like to listen to a song? \n"))
while True:
reply = ""
data = conn.recv(2048)
if data == b's':
conn.send(str.encode("\n hi\n"))
webbrowser.open('https://www.youtube.com/watch?v=DLzxrzFCyOs')
if not data:
break
conn.sendall(str.encode(reply))
print (data)
conn.close()
while True:
conn, addr = s.accept()
print("connected to:" +addr[0]+":"+str(addr[1]))
start_new_thread(threaded_client,(conn,))
当我尝试连接时,这是我收到的消息C:\Users\Douglas Rouse>telnet 127.0.0.1 9999
Connecting To 127.0.0.1...Could not open connection to the host, on port 9999: Connect failed
答案 0 :(得分:3)
UPD :
我刚刚注意到您尝试使用127.0.0.1
作为IP地址进行连接。该地址总是意味着"这台计算机",所以你基本上尝试从一台机器连接到它自己,因为服务器在另一台机器上而失败了。
您需要找到服务器的IP地址,这是"可见"来自客户端机器。如果他们在同一个本地网络中,我会假设它采用以下常见形式之一:192.168.x.y
,10.0.0.x
,10.x.y.z
。< / p>
旧答案:
如果您使用Windows,请确保防病毒软件和内置防火墙都不会干扰。通常,它们都会阻止任何非标准通信。
最简单的检查方法是在两台机器上临时切换它们。如果这有帮助,请尝试仅在服务器端关闭它们(也应该工作)。如果这有帮助,请将应用程序的例外添加到防病毒和防火墙。