zoukankan      html  css  js  c++  java
  • Python学习之路_day_31(tcp协议/socket)

    1. tcp协议:

    可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

    以太网头 ip 头               tcp头               数据                                                    

    udp协议:

    不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

    以太网头 ip头                      udp头                            数据                                           

    tcp报文

    tcp三次握手和四次挥手

    1. 互联网协议

      一台硬设有了操作系统,然后装上软件你就可以正常使用了,然而你也只能自己使用

      像这样,每个人都拥有一台自己的机器,然而彼此孤立

      如何能大家一起玩耍

      然而internet为何物?

      其实两台计算机之间通信与两个人打电话之间通信的原理是一样的(中国有很多地区,不同的地区有不同的方言,为了全中国人都可以听懂,大家统一讲普通话)

      普通话属于中国国内人与人之间通信的标准,那如果是两个国家的人交流呢?

      问题是,你不可能要求一个人/计算机掌握全世界的语言/标准,于是有了世界统一的通信标准:英语

      结论:英语成为世界上所有人通信的统一标准,如果把计算机看成分布于世界各地的人,那么连接两台计算机之间的internet实际上就是

      一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列的协议,总称为‘互联网协议’(Internet Protocol Suite).

      互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

      2.2 osi七层协议

      互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

      每层运行常见物理设备

    2. socket

      ocket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

      所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

    3. 基于socket来编写C/S架构软件
      #_*_coding:utf-8_*_
      __author__ = 'Linhaifeng'
      import socket
      ip_port=('127.0.0.1',9000)  #电话卡
      BUFSIZE=1024                #收发消息的尺寸
      s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机
      s.bind(ip_port) #手机插卡
      s.listen(5)     #手机待机
      
      
      conn,addr=s.accept()            #手机接电话
      # print(conn)
      # print(addr)
      print('接到来自%s的电话' %addr[0])
      
      msg=conn.recv(BUFSIZE)             #听消息,听话
      print(msg,type(msg))
      
      conn.send(msg.upper())          #发消息,说话
      
      conn.close()                    #挂电话
      
      s.close()                       #手机关机
      
      服务端
      #_*_coding:utf-8_*_
      __author__ = 'Linhaifeng'
      import socket
      ip_port=('127.0.0.1',9000)
      BUFSIZE=1024
      s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
      
      s.connect_ex(ip_port)           #拨电话
      
      s.send('linhaifeng nb'.encode('utf-8'))         #发消息,说话(只能发送字节类型)
      
      feedback=s.recv(BUFSIZE)                           #收消息,听话
      print(feedback.decode('utf-8'))
      
      s.close()                                       #挂电话
      
      客户端
  • 相关阅读:
    异或运算实现两数交换
    安装Keepalived namespaces.c:187: error: ‘SYS_setns’ undeclared (first use in this function)
    安装keepalived OpenSSL is not properly installed on your system. !!!
    jackson json转实体对象 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException
    solr集群Server refused connection at: http://127.0.0.1:6060/solr/ego 注册zookeepr自动使用内网ip
    Solr java.sql.SQLException: null, message from server: "Host 'xxx' is not allowed to connect to this MySQL server
    Jackson中@JsonProperty等常用注解
    java.lang.ClassNotFoundException: XXX (no security manager: RMI class loader disabled)
    ActiveMQ学习总结------Spring整合ActiveMQ 04
    为什么嵌入式开发用memcpy()而不用strncpy()
  • 原文地址:https://www.cnblogs.com/zjh009/p/9556297.html
Copyright © 2011-2022 走看看