zoukankan      html  css  js  c++  java
  • day35 socket的常用方法,

    ---恢复内容开始---

    网络编程内容一周的总结

     (重点)粘包 :  就是因为接收端不知道如何接收数据,造成接收数据的混乱的问题
          只发生在tcp协议上. 因为tcp协议的特点是面向数据流形式的传输
       粘包的发生主要是因为tcp协议有两个机制: 合包机制(nagle算法),拆包机制
     
     subprocess 模块 有一个方法可以执行系统命令 Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
     
     struct 模块  有一个方法可以将21.3E以内的数据,打包成4个长度的bytes
     r = struct.pack('i',num)
     struct.unpack('i',r)
     
      (重点)架构: C/S架构   B/S架构(优点:统一了应用的接口)
     
        多台电脑通信 : 交换机+路由器
     
     mac地址: 物理地址,全球唯一        身份证号
     ip地址 : 虚拟地址,四位点分十进制  学号
     
      (重点)如何判断两台主机是否在同一个局域网?
         ip地址 & 子网掩码  = 网段
     
      (重点)arp协议: 通过目标ip地址,获取目标mac地址
       
     端口:操作系统给予,通过端口号,可以确定某一个应用程序
      (重点)ip+端口:唯一确定某一个主机上的某一个应用程序
        回环地址:127.0.0.1
     
     osi五层模型:
        应用层       py文件,应用
        传输层       tcp/udp协议
        网络层       ip协议
        数据链路层   arp协议,网卡
        物理层       网线,集线器,光纤
       
        (重点)tcp协议:安全,可靠,面向连接,面向数据流形式的传输
        三次握手:
          (面试回答)
       首先,必须先由客户端发起连接的请求
       接下来,服务器接收到请求之后,回复给客户端两个标识,一个syn表示
          服务器接收到请求,一个ack表示服务器在做准备工作,两个标识一起
       回复给客户端
       最后,客户端接收到服务器的回复,客户端准备连接的所有资源,开始进行连接
       发送给服务器一个ack表示客户端的连接准备工作已经完成
       (此时表示客户端和服务器可以相互连接了)
       如果面试官问你,哪句代码体现了三次握手?
         回答: 服务器端的accept,客户端connect
        
        四次挥手:
          (面试回答)
              (1)首先由连接双方任意一方发起断开连接的请求,发起方发送的请求表示
        是我没有数据要继续发送了,可以断开连接了,但是你如果还有数据可以继续向我发送数据.
              (2)接收方回复给发起方,表示接到了发起放的断开请求,开始着手准备断开事宜
        (3)接收方准备完成后,给发起方发送一个标识,表示接受方没有数据继续发送了
           可以断开连接了
           (4)发起方接收到消息后,准备断开连接,回收资源
        如果面试官问你,哪句代码体现了四次挥手?
          回答: close()
     
     (重点)udp协议:快. 不安全,不可靠,不面向连接,面向数据包形式的传输
     
     
    今日内容 
      1 介绍socket模块中一些其他常用方法
       send 和 sendall 的区别:
         对于程序员来说,用起来是没有什么区别的
      实际上,在socket底层对于两个方法的封装有却别:
         send(num) 此方法会尝试先发送n个数据(n<num),接下来再尝试发送num-n
            sendall(num)  此方法会尝试一次性将num个数据发送出去

         
    (重点)setblocking(True)  阻塞
       setblocking(False) 非阻塞
       settimeout(int)    针对阻塞状态,设置一个延时等待
     
     
       gettimeout()       获得延时的时间
     
     
     
     
     

    ---恢复内容结束---

  • 相关阅读:
    [论文阅读]VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION(VGGNet)
    VMware虚拟机 Ubuntu 实用技巧 (1) -- 安装VMware Tool
    python 开发技巧(4)-- 用PyCharm实用技巧(我自己常用的)
    python 开发技巧(3)-- 连接mysql 出现错误 ModuleNotFoundError: No module named 'MySQLdb'
    python 开发技巧(2)-- Django的安装与使用
    Linux netstat命令
    RabbitMQ(一):Windows下RabbitMQ安装
    python 开发技巧(1)-- 用PyCharm安装第三方库
    Swoole系列(三):建立TCP服务器并发送数据测试
    Swoole系列(二):安装
  • 原文地址:https://www.cnblogs.com/daien522556/p/9342302.html
Copyright © 2011-2022 走看看