• 网络QQ聊天代码实例


    前端 客户端server

    首先引入

    import socket
    ip_port=('127.0.0.1',8081)
    udp_server_sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #DGRAM:datagram 数据报文的意思,象征着UDP协议的通信方式
    udp_server_sock.bind(ip_port)#你对外提供服务的端口就是这一个,所有的客户端都是通过这个端口和你进行通信的
    
    while True:
        qq_msg,addr=udp_server_sock.recvfrom(1024)# 阻塞状态,等待接收消息
        print('来自[%s:%s]的一条消息:33[1;44m%s33[0m' %(addr[0],addr[1],qq_msg.decode('utf-8')))
        back_msg=input('回复消息: ').strip()
    
        udp_server_sock.sendto(back_msg.encode('utf-8'),addr)

    建立后端服务端client

    import socket
    BUFSIZE=1024
    udp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    qq_name_dic={
        'taibai':('127.0.0.1',8081),
        'Jedan':('127.0.0.1',8081),
        'Jack':('127.0.0.1',8081),
        'John':('127.0.0.1',8081),
    }
    
    
    while True:
        qq_name=input('请选择聊天对象: ').strip()
        while True:
            msg=input('请输入消息,回车发送,输入q结束和他的聊天: ').strip()
            if msg == 'q':break
            if not msg or not qq_name or qq_name not in qq_name_dic:continue
            udp_client_socket.sendto(msg.encode('utf-8'),qq_name_dic[qq_name])# 必须带着自己的地址,这就是UDP不一样的地方,不需要建立连接,但是要带着自己的地址给服务端,否则服务端无法判断是谁给我发的消息,并且不知道该把消息回复到什么地方,因为我们之间没有建立连接通道
    
            back_msg,addr=udp_client_socket.recvfrom(BUFSIZE)# 同样也是阻塞状态,等待接收消息
            print('来自[%s:%s]的一条消息:33[1;44m%s33[0m' %(addr[0],addr[1],back_msg.decode('utf-8')))
    
    udp_client_socket.close()
  • 相关阅读:
    Using temporary与Using filesort
    mysql order by 造成语句 执行计划中Using filesort,Using temporary相关语句的优化解决
    mysql Using join buffer (Block Nested Loop) join连接查询优化
    Centos桥接静态IP配置方法
    shell脚本 tomcat自动备份发布服务
    Centos7离线安装Redis
    MySql存储引擎介绍,如何选择合适的引擎
    场效应管
    单片机指针作为函数形式参数
    指针数组与数组指针
  • 原文地址:https://www.cnblogs.com/liurenli/p/9804891.html
Copyright © 2020-2023  润新知