如何使用Python中的socket库将我的服务器连接到其他机器?

2024-04-19 11:44:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新的套接字库和服务器端编程。我编写了两个脚本,它们在我的机器上运行得非常好,即server.pyclient.py。但是当我在两台不同的电脑上测试它时,它不起作用。你知道吗

What i want is to make my server.py file connected to client.py, where server.py will run on my machine and it will be connected to client.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中,或者我必须导入其他库?你知道吗

任何帮助都将不胜感激。


Tags: topyclient机器hostserveronport
2条回答

客户端.py您将套接字连接到socket.gethostname(),而不是服务器的ip地址。现在,您的客户机正在尝试创建一个应该与客户机运行在同一ip上的服务器。从逻辑上讲,当服务器和客户端在同一ip上运行时,这将起作用,但当客户端驻留在另一台计算机上时,您需要连接到正确的ip地址:

s.connect((host, port))

另外,请确保端口实际上是打开的,并且没有被其他程序阻塞。This网站帮助我在两台不同的笔记本电脑上打开端口7777,并在它们上运行您编辑的代码。您可以对端口12048执行相同的操作。你知道吗

  1. 右键单击“开始”按钮。你知道吗
  2. 单击“搜索”。你知道吗
  3. 键入Windows防火墙。你知道吗
  4. 单击Windows防火墙。你知道吗
  5. 单击高级设置。你知道吗
  6. 单击窗口左侧框架中的入站规则。你知道吗
  7. 单击窗口右框中的“新建规则…”。你知道吗
  8. 单击端口。你知道吗
  9. 单击“下一步”。你知道吗
  10. 单击TCP或UDP。你知道吗
  11. 单击特定的本地端口。你知道吗
  12. 键入端口号。(在这种情况下,我们将打开端口12048。)
  13. 单击“下一步”。你知道吗
  14. 单击“允许连接”。你知道吗
  15. 单击“下一步”。你知道吗
  16. 单击要允许连接通过的任何网络类型。你知道吗
  17. 单击“下一步”。你知道吗
  18. 键入规则的名称。你知道吗
  19. 单击“完成”。你知道吗

我相信对于一个套接字,你必须打开TCP端口,但是如果这不起作用,你也可以为UDP端口制定一个新的规则。你知道吗

客户机将只连接到同一台计算机上运行的服务器的原因是您使用的是s.connect((socket.gethostname(), port)),而不是s.connect((host, port))。您的hostIP变量从未被使用。这个错误意味着客户机将试图连接到它自己的主机名,也就是它自己,所以它只能在一台计算机上工作。你知道吗

您应该这样修改client.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '192.168.1.162'  # Make sure this is set to the IP of the server
port = 12048

s.connect((host, port))

msg = s.recv(1024)
print(msg.decode("utf-8"))

现在,您将能够连接到另一台计算机上运行的服务器。你知道吗

相关问题 更多 >