• 3 聊天室


    1. 运行现象

        

    2.程序

      1)版本1:大框架

    #1.导入模块
    
    #2.创建socket套接字
    
    #3.接受ip地址,和数据
    
    #4.提取解码打印数据

      2)版本2:一次接受数据

    #1.导入模块
    from socket import *
    
    #2.创建socket套接字
    udp_socket = socket(AF_INET,SOCK_DGRAM)
    
    #绑定接受方端口
    udp_socket.bind(("",7790))
    
    #3.接受ip地址,和数据
    recv_data = udp_socket.recvfrom(1024)
    
    #4.提取解码打印数据
    print(recv_data[0].decode("gb2312"))

             

      2)版本3:优化代码

    #1.导入模块
    from socket import *
    
    #2.创建socket套接字
    udp_socket = socket(AF_INET,SOCK_DGRAM)
    
    #绑定接受方端口
    udp_socket.bind(("",7790))
    
    #3.接受ip地址,和数据
    recv_data = udp_socket.recvfrom(1024)
    
    #4.提取解码打印数据
    print(recv_data[1])
    print(recv_data[0].decode("gb2312"))

               

           

          

    #1.导入模块
    from socket import *
    import time
    
    #2.创建socket套接字
    udp_socket = socket(AF_INET,SOCK_DGRAM)
    
    #绑定接受方端口
    udp_socket.bind(("",7790))
    
    #3.接受ip地址,和数据
    recv_data = udp_socket.recvfrom(1024)
    
    #4.提取解码打印数据
    name = recv_data[1]
    data = recv_data[0].decode("gb2312")
    name = recv_data[1][0]
    now_time = "[" + time.ctime() + "] "
    
    data = now_time + name + ": " + data
    print(data)

           

          

      3)版本3:while True

    #1.导入模块
    from socket import *
    import time
    
    while True:
        #2.创建socket套接字
        udp_socket = socket(AF_INET,SOCK_DGRAM)
    
        #绑定接受方端口
        udp_socket.bind(("",7791))
    
        #3.接受ip地址,和数据
        recv_data = udp_socket.recvfrom(1024)
    
        #4.提取解码打印数据
        name = recv_data[1]
        data = recv_data[0].decode("gb2312")
        name = recv_data[1][0]
        now_time = "[" + time.ctime() + "] "
    
        data = now_time + name + ": " + data
        print(data)

           

          

      4)版本4:多窗口聊天

        

    #1.导入模块
    from socket import *
    import time
    
    while True:
        #2.创建socket套接字
        udp_socket = socket(AF_INET,SOCK_DGRAM)
    
        #绑定接受方端口
        udp_socket.bind(("",7792))
    
        #3.接受ip地址,和数据
        recv_data = udp_socket.recvfrom(1024)
    
        #4.提取解码打印数据
        name = recv_data[1]
        data = recv_data[0].decode("gb2312")
        name = recv_data[1][0]
        now_time = "[" + time.ctime() + "] "
    
        data = now_time + name + ": " + data
        print(data)

     

      问题1:为什么每次都要换端口进行监听??while True错误

    Traceback (most recent call last):
      File "04-多窗口聊天.py", line 10, in <module>
        udp_socket.bind(("",7791))
    OSError: [Errno 98] Address already in use

      问题2:while Ture位置?

    • 最少的,需要重复运行的代码添加while True
    • 1个端口号只能用来标记1个进程,只能绑定1次,

      问题3:函数封装

    • 代码记得要用函数封装起来

    3 老师代码

    from socket import *
    
    def main():
    
        updSocket = socket(AF_INET, SOCK_DGRAM)
        #绑定端口,只能绑定1次
        updSocket.bind(("",6789))
    
        while True:
            #核心:收数据,打印
            recvInfor = updSocket.recvfrom(1024)
            print("[%s]:%s"%(str(recvInfor[1]),recvInfor[0].decode("gb2312")))
    
    if __name__ == "__main__":
        main()

           

  • 相关阅读:
    OpenGL ES multithreading and EAGLSharegroup
    NSRange用法(转)
    多测师肖老师_mysql之视图(10.1)
    多测师肖老师__三表(9.1)
    多测师肖老师__多表练习(8.1)
    多测师肖老师__多表讲解(7.9)
    多测师肖老师_mysql之单表练习(7.5)
    多测师肖老师__单表建表和练习(1.8)
    多测师肖老师_mysql之单表和多表题(9.2)
    多测师肖老师___分享杭州面试题
  • 原文地址:https://www.cnblogs.com/venicid/p/7977626.html
Copyright © 2020-2023  润新知