zoukankan      html  css  js  c++  java
  • 2018.11.6

    1 TCP 和 UDP 发送数据时的流程 *****
    解释 为何TCP是可靠的 是因为发送数据后必须收到确认包

    1.2.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.recv(1024).decode("utf-8")
    if not msg:
    c.close()
    break
    c.send(msg.upper().encode("utf-8"))
    except BaseException:
    print("客户端异常断开")
    c.close()
    break
    server.close()

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

    client.close()


    2 UDP的模板代码 *****
    与TCP代码的区别
    不需要监听 不需要接收
    type参数为 SOCK_DGRAM
    UDP 可以同时处理多个客户端 是因为CPU处理速度快 给人感觉像是同时处理

    服务器
    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)

    客户端
    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 什么是进程
    正在进行(运行)的程序
    在只有一个CPU的情况下
    是因为有多道技术
    内存被分为多个区域 存放不同的应用程序
    当一个应用程序遇到了I/O操作时 操作系统会将CPU分配给其他的应用程序使用
    切换的时间非常短 用户是感觉不到的
    特点:
    一个操作系统中可以同时存在多个进程
    内部使用了多道技术 可以快速在不同进程间切换 给用户的感觉像是同时运行
    进程是一个包含程序运行所需的所有资源的单位

  • 相关阅读:
    417 Pacific Atlantic Water Flow 太平洋大西洋水流
    416 Partition Equal Subset Sum 分割相同子集和
    415 Add Strings 字符串相加
    414 Third Maximum Number 第三大的数
    413 Arithmetic Slices 等差数列划分
    412 Fizz Buzz
    410 Split Array Largest Sum 分割数组的最大值
    409 Longest Palindrome 最长回文串
    day22 collection 模块 (顺便对比queue也学习了一下队列)
    day21 计算器作业
  • 原文地址:https://www.cnblogs.com/jutao/p/9919711.html
Copyright © 2011-2022 走看看