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分配给其他的应用程序使用
    切换的时间非常短 用户是感觉不到的
    特点:
    一个操作系统中可以同时存在多个进程
    内部使用了多道技术 可以快速在不同进程间切换 给用户的感觉像是同时运行
    进程是一个包含程序运行所需的所有资源的单位

  • 相关阅读:
    python 3+djanjo 2.0.7简单学习(三)--Django 管理页面
    python 3+djanjo 2.0.7简单学习(二)--创建数据库和模型
    lucene3.6.0 经典案例 入门教程
    Android——自定义Actionbar左侧覆盖不全的解决方案
    Android——ViewPager多页面滑动切换以及动画效果
    Android——LayoutInflater详解
    java.sql.SQLException:指定了无效的 Oracle URL
    核函数方法简介
    IEEE论文格式要求
    oracle使用DataBase Configuration Assistant创建、删除数据库
  • 原文地址:https://www.cnblogs.com/jutao/p/9919711.html
Copyright © 2011-2022 走看看