python - 如何使用Python中的套接字库将服务器连接到其他计算机?

标签 python python-3.x sockets ftp connection

我是套接字库和服务器端编程的新手。我制作了2个脚本,它们可以在我的机器上完美运行,即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.



我只知道套接字。但是如果这个问题可以通过使用其他库来解决,那也可以。

这是我的代码:

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接收文件到我的机器。是否有可能在套接字或我必须导入任何其他库?

任何帮助将不胜感激。

最佳答案

客户端仅连接到在同一台计算机上运行的服务器的原因是,因为您使用的是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"))

现在,您将可以连接到在另一台计算机上运行的服务器。

关于python - 如何使用Python中的套接字库将服务器连接到其他计算机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59286024/

相关文章:

python 3 : How to call function from another file and pass arguments to that function ?

python - 如何在字典列表中使用列表和字典理解添加键和值?

ios - objc 项目中 Socket.IO-Client-Swift 中的回调

c++ - 将来自套接字的 read() 的输出存储在 char 变量中

python - Android 上的 Appengine 身份验证

python - 将从 os.walk 接收到的路径放入 cmd 中以在 Windows 终端上运行 - python

python - 使用 Enthought Canopy Python 在 Windows 上安装 OpenCV 的最佳方法?

python-3.x - Conda:UnicodeEncodeError: 'charmap' 编解码器无法对位置 644 中的字符 '\u2580' 进行编码:字符映射到 <undefined>

python 3 |多线程在 thread.start() 声明之前开始

linux - 同时发送和接收 UDP 消息