使用套接字连接多台计算机(python)

时间:2020-04-10 07:12:11

标签: python sockets client host

我正在尝试用套接字连接多台计算机。我可以在计算机上运行主机和客户端,它们将连接。但是,如果我尝试在另一台计算机上运行客户端,它将无法连接。这是我的主机代码:

import socket
import requests

# NOTES:socket.gethostname()

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 1234))
s.listen(5)
print("Searching for available computers...")
while True:
                clientsocket, address = s.accept()
                print(f"Connection from {address} has been established!")
                usr = input("Temporary username for this session: ")
                msg = input("Send to client: ")
                clientsocket.send(bytes(usr + " says > " + msg, "utf-8"))
                break

while True:
        msg1 = input("Send to client: ")
        clientsocket.send(bytes(usr + " says > " +msg1, "utf-8"))
#w

这是我给客户的代码:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 1234))

while True:
    msg = s.recv(1028)
    print(msg.decode("utf-8"))

怎么了?

2 个答案:

答案 0 :(得分:0)

这是因为服务器正在侦听的IP地址是0.0.0.0(本地主机),只有同一台计算机上的程序才能访问该IP地址。将服务器的IP地址更改为socket.gethostbyname(socket.gethostname()),这将返回计算机的本地IP地址。连接到同一网络的任何人都可以访问该本地IP地址。在客户端代码中,您必须将IP地址更改为从上述函数返回的IP地址。因此,在服务器计算机上运行print(socket.gethostbyname(socket.gethostname())),并将客户端连接的IP地址设置为打印值。

答案 1 :(得分:0)

“ 0.0.0.0”部分是正确的(请记住,此配置允许任何IP地址(从WAN和LAN)连接到服务器)。 您必须更改此设置:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 1234))

while True:
    msg = s.recv(1028)
    print(msg.decode("utf-8"))

对此:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("ip of the server", 1234))

while True:
    msg = s.recv(1028)
    print(msg.decode("utf-8"))

因为socket.gethostname()命令用于获取在其上运行程序的计算机的ip地址(不是服务器本身...如果未指定,则实际上是这样,客户端无法知道该地址是什么)服务器位于)

p.s。 记得在服务器上打开端口1234 + 请不要使用1028 ...这是一个非常糟糕的数字:请改用1024

相关问题