套接字:Peer to Peer聊天工作如何?

时间:2016-06-04 17:25:54

标签: python sockets network-programming

我试图在不手动添加用户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地址?

enter image description here

如果我需要一些额外的必要模块,其中一个模块会是什么?我可以将P2P模块用于套接字吗?

1 个答案:

答案 0 :(得分:1)

在1:1的情况下,第一个程序不需要知道其他人的地址。它只是启动并等待。第二个程序需要知道第一个程序的地址。一发送"你好"第一个程序现在通过recvfrom知道第二个程序的地址。

如果你想要没有已知地址,那么它就不再是一个Python问题了。现在您需要了解自动配置和网络发现协议。多播? DNS服务发现?的Bonjour?

这变得非常复杂。这么多聊天和聊天互联网系统有一个服务器,每个人都知道地址的原因,这是一个很好的理由。

希望这有帮助。