我是新的套接字库和服务器端编程。我编写了两个脚本,它们在我的机器上运行得非常好,即server.py
和client.py
。但是当我在两台不同的电脑上测试它时,它不起作用。你知道吗
What i want is to make my
server.py
file connected toclient.py
, whereserver.py
will run on my machine and it will be connected toclient.py
on a separate machine at any location in the world.
我只知道插座。但是如果这个问题可以通过使用其他库来解决,那么也没关系。
这是我的代码:
服务器.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostbyname(socket.gethostname())
port = 12048
s.bind((host, port))
s.listen()
print("Server listening @ {}:{}".format(host, port))
while True:
c, addr = s.accept()
print("Got connection from", addr)
c.send(bytes("Thank you", "utf-8"))
客户端.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '192.168.1.162' # The IP printed by the server must be set here
port = 12048
s.connect((socket.gethostname(), port))
msg = s.recv(1024)
print(msg.decode("utf-8"))
我不知道怎么可能,但如果是的话,请回答这个问题。你知道吗
另外,我想从client.py
接收文件到我的机器。有没有可能在socket中,或者我必须导入其他库?你知道吗
任何帮助都将不胜感激。
在客户端.py您将套接字连接到
socket.gethostname()
,而不是服务器的ip地址。现在,您的客户机正在尝试创建一个应该与客户机运行在同一ip上的服务器。从逻辑上讲,当服务器和客户端在同一ip上运行时,这将起作用,但当客户端驻留在另一台计算机上时,您需要连接到正确的ip地址:另外,请确保端口实际上是打开的,并且没有被其他程序阻塞。This网站帮助我在两台不同的笔记本电脑上打开端口7777,并在它们上运行您编辑的代码。您可以对端口12048执行相同的操作。你知道吗
我相信对于一个套接字,你必须打开TCP端口,但是如果这不起作用,你也可以为UDP端口制定一个新的规则。你知道吗
客户机将只连接到同一台计算机上运行的服务器的原因是您使用的是
s.connect((socket.gethostname(), port))
,而不是s.connect((host, port))
。您的host
IP变量从未被使用。这个错误意味着客户机将试图连接到它自己的主机名,也就是它自己,所以它只能在一台计算机上工作。你知道吗您应该这样修改
client.py
:现在,您将能够连接到另一台计算机上运行的服务器。你知道吗
相关问题 更多 >
编程相关推荐