如何使用 Python 中的套接字库将我的服务器连接到其他机器?
How to connect my server to other machine using socket library in Python?
我是套接字库和服务器端编程的新手。我制作了 2 个在我的机器上完美运行的脚本,即 server.py
和 client.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.
我只知道socket而已。但是如果这个问题可以通过使用其他库来解决,那么也可以。
这是我的代码:
server.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"))
client.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
接收文件到我的机器。是否可以在套接字中或我必须导入任何其他库?
如有任何帮助,我们将不胜感激。
在 Client.py 中,您将套接字连接到 socket.gethostname()
而不是服务器的 IP 地址。现在,您的客户端正在尝试连接一个服务器,该服务器应该 运行ning 在与客户端相同的 IP 上。从逻辑上讲,当服务器和客户端 运行 在同一 ip 上时,这将起作用,但是当客户端驻留在另一台机器上时,您需要连接到正确的 ip 地址:
s.connect((host, port))
此外,请确保该端口实际打开且未被其他程序阻止。 This 网站帮助我在两台不同的笔记本电脑上打开了端口 7777,并 运行 您在它们上编辑的代码。您可以对端口 12048 执行相同的操作。
- 右键单击“开始”按钮。
- 点击搜索。
- 类型 Windows 防火墙。
- 单击 Windows 防火墙。
- 点击高级设置。
- 单击 window 左侧框架中的入站规则。
- 在 window.
的右侧框架中单击“新建规则...”
- 单击端口。
- 单击“下一步”。
- 单击 TCP 或 UDP。
- 单击特定本地端口。
- 键入端口号。 (在这种情况下,我们将打开端口 12048。)
- 单击“下一步”。
- 单击允许连接。
- 单击“下一步”。
- 单击您要允许连接的任何网络类型。
- 单击“下一步”。
- 键入规则的名称。
- 单击“完成”。
我认为对于套接字,您必须打开 TCP 端口,但如果这不起作用,您也可以为 UDP 端口制定新规则。
客户端将仅连接到同一台计算机上的服务器 运行 的原因是因为您使用的是 s.connect((socket.gethostname(), port))
而不是 s.connect((host, port))
。您的 host
IP 变量从未被使用。这个错误意味着客户端将尝试连接到它自己的主机名,这就是它自己,所以这就是它只能在一台计算机上工作的原因。
您应该这样修改 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"))
现在您可以在另一台计算机上连接到服务器 运行。
我是套接字库和服务器端编程的新手。我制作了 2 个在我的机器上完美运行的脚本,即 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.
我只知道socket而已。但是如果这个问题可以通过使用其他库来解决,那么也可以。
这是我的代码:
server.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"))
client.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
接收文件到我的机器。是否可以在套接字中或我必须导入任何其他库?
如有任何帮助,我们将不胜感激。
在 Client.py 中,您将套接字连接到 socket.gethostname()
而不是服务器的 IP 地址。现在,您的客户端正在尝试连接一个服务器,该服务器应该 运行ning 在与客户端相同的 IP 上。从逻辑上讲,当服务器和客户端 运行 在同一 ip 上时,这将起作用,但是当客户端驻留在另一台机器上时,您需要连接到正确的 ip 地址:
s.connect((host, port))
此外,请确保该端口实际打开且未被其他程序阻止。 This 网站帮助我在两台不同的笔记本电脑上打开了端口 7777,并 运行 您在它们上编辑的代码。您可以对端口 12048 执行相同的操作。
- 右键单击“开始”按钮。
- 点击搜索。
- 类型 Windows 防火墙。
- 单击 Windows 防火墙。
- 点击高级设置。
- 单击 window 左侧框架中的入站规则。
- 在 window. 的右侧框架中单击“新建规则...”
- 单击端口。
- 单击“下一步”。
- 单击 TCP 或 UDP。
- 单击特定本地端口。
- 键入端口号。 (在这种情况下,我们将打开端口 12048。)
- 单击“下一步”。
- 单击允许连接。
- 单击“下一步”。
- 单击您要允许连接的任何网络类型。
- 单击“下一步”。
- 键入规则的名称。
- 单击“完成”。
我认为对于套接字,您必须打开 TCP 端口,但如果这不起作用,您也可以为 UDP 端口制定新规则。
客户端将仅连接到同一台计算机上的服务器 运行 的原因是因为您使用的是 s.connect((socket.gethostname(), port))
而不是 s.connect((host, port))
。您的 host
IP 变量从未被使用。这个错误意味着客户端将尝试连接到它自己的主机名,这就是它自己,所以这就是它只能在一台计算机上工作的原因。
您应该这样修改 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"))
现在您可以在另一台计算机上连接到服务器 运行。