python之局域网聊天工具(UDP)

概述

在 python之socket编程(UDP) 中,写了两个py文件来进行收发数据,这显然是不合理的,像QQ、微信等即时通信工具,都是 一个程序实现了收发

分析

本文实现一个程序进行收发,由于 接收数据 的方法会 阻塞,所以一旦执行 接收数据 方法后,程序处于无响应状态,无法接收键盘输入
难点在于:通过多线程的方式,主线程用于发数据、子线程用于接收数据

#coding=utf-8
import socket,threading

udp=None
ip=''
port=0

def recvdata():
    global udp
    while True:
        data,addr=udp.recvfrom(1024)
        print('\n来自%s:%d的消息::%s'%(addr[0],addr[1],data.decode('utf-8')))


if __name__ == "__main__":
    print('欢迎使用局域网聊天工具v0.1')
    localport=input('设置本机端口:')
    ip=input('请输入对方ip:')
    port=input('请输入对方port:')

    udp=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    udp.bind(('',int(localport)))

    t=threading.Thread(target=recvdata)
    t.start()

    while True:
        text=input('请输入消息:')
        udp.sendto(text.encode('utf-8'),(ip,int(port)))

执行后,按照提示绑定本地端口,远程ip地址、端口,即可发送数据

注意:
在上面的代码中,一个socket对象可以发数据,也可以接收数据,这种叫做 全双工模式,详细参见链接:
http://www.malaoshi.top/show_1EF2zlQVGg3F.html


原文出处:/show_1EF2zlQVGg3F.html