UDP实现全双工聊天(聊天工具进阶)pyhton

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a19990412/article/details/79401727

聊天工具的基础版本,如果对下面的代码看的有些难度,可以点击访问先看简单的版本~

全双工聊天就是指: 既可以任何一端,既可以发信息,又可以收信息,而且是独立的。(之前的半双工聊天,是每次只能有一端在发送信息,另外一端在对方没有发送过来信息之前是不能发送信息的,只能等对方先写好再来~)

  • 所以说,全双工还是比之前的先进了很多了呢~

代码使用方法:
区别于之前的必须要有两个不同端口的代码,这次就更人性化了点。 只有一份代码,因为每个人的功能都是类似的。

  • 在本地输入的命令框下,输入 python Chat.py。这样就可以使用了
  • 为了演示完全,下面接着描述。
  • 首先,会提示输入对方的IP,不然不给你启动。(哈哈,也就是不会接受对方的信息,这点还是很菜的,改设计可以完善)
  • 然后,没有什么特别的提示符。你在本机输入信息就好了,对方如果也运行起同样的代码,对方就是可以接受到你的信息的。如果对方没有登陆。那对方就是接受不到你的信息的。 这点类比于QQ的对方是离线的,你可以给对方发信息,但是对方收不到这个信息
  • 收到对方信息时,同时会显示对方的IP地址。以及你收到的时间。 之后就是收到的信息了~

祝各位小哥玩的愉快~代码放在下面了~

from socket import *
import threading
from time import ctime


def Recv(sock, BUFSIZE=1024):
    print('Recver is UP!')
    while True:
        try:
            data, addr = sock.recvfrom(BUFSIZE)
        except OSError:
            break
        print('%s [%s]' % (addr[0], ctime()), data.decode())


def main(targetHost, targetPost=21567):
    HOST = ''
    POST = 21567
    BUFSIZ = 1024
    ADDR = (HOST, POST)

    targetADDR = (targetHost, targetPost)

    UdpSock = socket(AF_INET, SOCK_DGRAM)
    UdpSock.bind(ADDR)
    # 开启新线程,获取信息
    threadrev = threading.Thread(target=Recv, args=(UdpSock, BUFSIZ))
    threadrev.start()
    # 主线程开始传输信息~
    while True:
        data = input('')
        UdpSock.sendto(data.encode(), targetADDR)
        if not data:
            print('End of Chat')
            break
    UdpSock.close()


if __name__ == '__main__':
    IP = input('输入目标机器的IP地址: ')
    main(IP)
展开阅读全文

没有更多推荐了,返回首页