zoukankan      html  css  js  c++  java
  • day34

    今日内容:

    1. TCP半连接池原理

             服务器:

    import socket
    
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    server.bind(("127.0.0.1",9999))
        不是最大连接数!!!
    server.listen(5)
    
    while True:
        c,addr = server.accept()
        while True:
          try:
            msg = c.rcv(1024).decode("utf-8")
            if not msg:
                c.close()
                 break
             except BaseException:
                 print("客户端异常断开")
                 c.close()
                 break
     server.close()

      

        客户端:

    import socket
    
    client = socket.socket(socket.AF_INET,socket.SICK_STREAM)
    
    client.connect(("127.0.0.1",9999))
    
    while True:
            data = input(">>>:")
             if not data:continue
             client.send(daea.encode("utf-8"))
             msg = client.recv(1024).decode("utf-8")
              print(msg)
    
    client.close()

    2.UDP通讯

         服务器2:

    import socket
    
    创建socket对象 指定type参数为socket.SOCK_DGRAM 表示使用UDP协议
    server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) datagram数据报的意思
        绑定IP和端口
    server.bind(("127.0.0.1",8888))
    
    while True:
         接收数据 返回一个元组 数据和 发送的地址
       msg,c _addr = server.recvfrom(1024)
       print("收到来自%s:说:%s"%(c_addr[0],msg.decode("utf-8")))
             发送数据到指定IP和端口
         server.sendto(msg.upper(),c_addr)

    客户端2:

     import socket
    
    client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) datagram数据报的意思
    
    while True:
       msg = input(">>>:")
       client.sendto(msg.encode("utf-8"),("127.0.0.1",8888))
       data,addr = client.recvfrom(1024)
       print(data.decode("utf-8"))

    3.UDP聊天

         服务器:

    """

      群聊思路

         1.客户端先把数据交给服务器

         2.服务器先存储对方的地址

         3.把收到的数据给所有人的发一遍

    """

    import socket
    
    server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    server.bind(("127.0.0.1",8848))
    
    
    # 如果客户端与服务器在同一台计算机  并且有多个客户端  这些客户端ip都是相同的127.0.01
    
    clients = {}
    
    while True:
        msg,addr = server.recvfrom(1024)
    
        # 存储对方的地址:
        clients[addr[1]] = addr
    
        print(msg.decode("utf-8"))
        # 循环发给所有人
        for c in clients:
            # 这个消息不用给发送方发回去
            # if c == addr[1]:
            #     continue
            server.sendto(msg,clients[c])

    客户端1:

    import socket
    
    c = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    while True:
        msg = input(">>>:")
        c.sendto(msg.encode("utf-8"),"127.0.0.1",8848))
        msg,addr = c.revfrom(1024)
        print(msg.decode("utf-8"))

    客户端2:

    mport socket
    
    c = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    while True:
        msg = input(">>>:")
        c.sendto(msg.encode("utf-8"),("127.0.0.1",8848))
        msg, addr = c.recvfrom(1024)
        print(msg.decode("utf-8"))

    4.UDP聊天2

      发送机:

         

    import socket
    
    c = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    while True:
        msg = input(">>>:")
        c.sendto(msg.encode("utf-8"),("127.0.0.1",8848))
        msg, addr = c.recvfrom(1024)
        print(msg.decode("utf-8"))

     服务器:

    """
        群聊思路
            1.客户端先把数据交给服务器
            2.服务器先存储对方的地址
            3.把收到的数据给所有人都发一遍
    
    """
    
    
    import socket
    
    server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    server.bind(("127.0.0.1",8848))
    
    
     如果客户端与服务器在同一台计算机  并且有多个客户端  这些客户端ip都是相同的127.0.01
    
    clients = {}
    
    while True:
        msg,addr = server.recvfrom(1024)
    
         存储对方的地址:
        clients[addr[1]] = addr
    
        print(msg.decode("utf-8"))
         循环发给所有人
        for c in clients:
             这个消息不用给发送方发回去
             if c == addr[1]:
                 continue
            server.sendto(msg,clients[c])

     接收机:

    mport socket
    
    c = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # 先随便发一条消息给服务器  让服务知道自己的地址
    c.sendto("register".encode("utf-8"),("127.0.0.1",8848))
    
    while True:
        msg, addr = c.recvfrom(1024)
        print(msg.decode("utf-8"))

      今日总结:

     1.TCP模板代码

          半连接池的工资管理

          目前我们的程序是单线程 服务器要么处理通讯要么处理连接请求 无法同时进行

       2.TCP 和 UDP 发送数据时的流程

             解释 为何TCP是可靠的 是因为发送数据后必须收到确认包

       3.UOP的目标代码

          与TCP代码的区别

          不需要监听 不需要接收

           type参数为 SOCK_DGRAM

           UDP 可以同时处理多个客户端 是因为CPU处理速度快 给人家感觉是同时处理

  • 相关阅读:
    标准输入输出流
    打印流
    数据输入输出流
    对象操作流
    随机流
    内存输出流
    序列流
    转换流示例代码
    字符流的示例代码
    字符流
  • 原文地址:https://www.cnblogs.com/hui2002/p/9916316.html
Copyright © 2011-2022 走看看