我试图在不手动添加用户IP地址的情况下进行P2P聊天。
这些脚本将通过手动指定IP地址来发送和接收带有UDP数据包的UTF-8消息。
# Send
# Let's say this code is executed from PC1.
import socket
PC2_IP = '192.160.4.169' # IP address is not valid, it is just for example.
UDP_PORT = 5005
MESSAGE = "Hey there!"
sock = socket.socket(socket.AF_INET,
socket.SOCK_DGRAM)
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
现在举例来说,让我们从PC2执行Receiver脚本。
# Receive
# Let's say this code is executed from PC2.
import socket
ip = socket.gethostbyname(socket.gethostname())
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp.bind((ip, 5005))
while True:
data, addr = udp.recvfrom(1024)
print data
这样可以正常工作,脚本执行后会立即收到消息。
但理论上如何在不手动指定IP地址的情况下进行P2P聊天?
我如何让应用程序获得两个用户的主机名?我是否需要在发件人和收件人脚本中指定socket.gethostbyname(socket.gethostname())
的IP地址?
如果我需要一些额外的必要模块,其中一个模块会是什么?我可以将P2P模块用于套接字吗?
答案 0 :(得分:1)
在1:1的情况下,第一个程序不需要知道其他人的地址。它只是启动并等待。第二个程序需要知道第一个程序的地址。一发送"你好"第一个程序现在通过recvfrom知道第二个程序的地址。
如果你想要没有已知地址,那么它就不再是一个Python问题了。现在您需要了解自动配置和网络发现协议。多播? DNS服务发现?的Bonjour?
这变得非常复杂。这么多聊天和聊天互联网系统有一个服务器,每个人都知道地址的原因,这是一个很好的理由。
希望这有帮助。