02.Python修炼之路【04-模拟QQ】2018.04.23

                  要求:使用多线程完成一个全双工的类QQ聊天程序

                       关键字:多线程、socket、端口绑定、消息接收与发送

                                                                                                                                                                                                                                                                                                                   Author: Huchengdong

                                                                                                                                     Time: April 23  2018

-----------------------------------------------------------------BEGIN----------------------------------------------------------------------------

from  socket  import *  # 导入socket

from  threading  import  Thread  # 导入多线程threading的Thread模块


#1、接收数据,然后打印

def    recvData():

    recvInfo = udpSocket.recvfrom(1024) #每次接收数据的最大字节数为1024

    print(">>%s:%s"%(str(recvInfo[1],recvInfo[0]))) #打印数据信息

2、检测键盘,发送数据

def    sendData():

    sendInfo = input("<<")

    udpSocket.sendto(sendInfo.encode("utf-8"),(ip,port)) 


udpSocket = None   # udpSocket为对象,初试化为None

destIp = ""    #字符串对象,初始化为空字符串

destPort = 0   # 数字对象,初始化为0


def    main()

    # 改变成全局变量,让其他函数recvData()、sendData()调用

    global    udpSocket

    global    destIp

    global    destPort


    destIp = input("Your  ip:")

    destPort = int(input("Your  port:"))


    udpSocket = socket(AF_INET,  SOCK_DGRAM)  # 创建一个socket套接字

    udpSocket.bind(("",4567))  # IP地址和端口号:IP默认一般不写,系统自动分配;然后,为本地进程绑定一个端口号"4567"

    

    tr = Thread(target = recvData)  # 线程1:父线程调用子线程recvData对象

    ts = Thread(target = sendData) # 线程2:父线程调用子线程sendData对象


    tr.start() # 启动tr线程

    ts.start() # 启动ts线程

    

    tr.join()  # 父线程等待tr子线程执行结束

    ts.join()  # 父线程等待ts子线程执行结束


if  __name__=="__main__" 

    main()    # 调用函数main()



----------------------------------------------------END------------------------------------------------------




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值