zoukankan      html  css  js  c++  java
  • 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()

           

  • 相关阅读:
    在vue中添加实时时间
    在three中使用图片作为材质,并将材质流动起来
    在three.js中创建一个小球并且小球在外部添加辉光
    自动获取linux系统的iso镜像文件
    this指向的相关问题
    vue基础-01
    svn和git的简单使用命令和步骤
    您只能在 HTML 输出中使用 document.write。如果您在文档加载后使用该方法,会覆盖整个文档
    关于toLocaleDateString的坑
    JSON的介绍与细节
  • 原文地址:https://www.cnblogs.com/venicid/p/7977626.html
Copyright © 2011-2022 走看看