我不知道如何使用套接字库在多台电脑上进行聊天。我唯一尝试的就是用 radmin 的外部 IP 替换该 IP,并将程序提供给连接到网络的朋友,但这没有帮助,并且终端中出现错误,指示缺少服务器。
服务器:
import socket
HOST = "26.104.62.185"
PORT = 50000
server = socket.socket()
server.bind((HOST, PORT))
server.listen()
print("Сервер запущен!")
name = input("Введите ваше имя: ")
conn, addr = server.accept()
data = (conn.recv(2 ** 10)).decode()
print(f"{data} присоединился")
conn.send(name.encode())
while True:
msg = input("Я: ")
conn.send(msg.encode())
msg = conn.recv(2 ** 10)
msg = msg.decode()
print(data, ":", msg)
客户:
import socket
HOST = "26.104.62.185"
PORT = 50000
server = socket.socket()
name = input("Введите ваше имя: ")
server.connect((HOST, PORT))
server.send(name.encode())
data = server.recv(2 ** 10)
server_name = data.decode()
print(f"{server_name} присоединился")
while True:
msg = (server.recv(2 ** 10)).decode()
print(f"{server_name}: {msg}")
msg = input("Я: ")
server.send(msg.encode())
需要做什么?
在服务器上运行服务器部分。在虚拟机或具有白色地址或转发端口的计算机上。
对于多用户工作,您需要并行化程序。
第一种方法:使用select,选择当前消息来自哪个用户,逐条处理。在这个答案中https://ru.stackoverflow.com/a/1593265/16574
第二种启动线程的方式。
运行多处理的第三种方法。
对于初学者,我建议离开套接字并使用标准的 ThreadingTCPServer
https://docs.python.org/3/library/socketserver.html#socketserver.ForkingTCPServer