网络编程之 网络知识

一 网络的原理python

 1 客户端和服务端都是基于网路运行的。编程

 2 互联网协议:就是计算机界的英语设计模式

 3 五层协议:应用层,传输层,网络层,数据链路层,物理层这五层组成的缓存

  物理层:internet:发送和接收电信号(高低电频)服务器

  数据链路层:ethernet:一组电信号叫作数据帧,也叫数据报,数据报分为两个部分:报头(head)和数据(data)两部分。网络

    head包含的有:发送者/源地址:6个字节架构

           接收者/目标地址:6个字节socket

           数据类型:6个字节tcp

   mac地址:每个网卡在生产的时候就会产生一个mac地址。函数

   计算机的通讯就是靠吼,也叫广播包,只限于局域网的使用。世界上的全部网络都是有不少的局域网组成的。

  网络层:ip地址:分为ipv4和ipv6.

    每个IP地址都是有四个十进制数字组成

     ip协议:规定了网络的地址协议叫作ip协议,它定义的地址也叫作ip地址。

     子网地址:表示子网络特征的一个参数

     网关地址:为了跨子网的通讯,能和外网之间进行通讯。

      网关与网关之间的通讯就叫作路由协议。

    mac地址:为了找到局域网络的位置。

    ip地址:为了肯定子网的位置

    ARP协议:将局域网内的mac地址转成网关地址。

    mac地址和ip地址能找到世界上独一无二的一台机器。

  传输层:tcp协议和udp协议,每启动一个软件对应者一个端口。

   端口:肯定软件在计算机上面的位置。

   ip地址加上端口:能够肯定世界上一台计算机上的一个软件的位置。

  应用层:产生一个数据。

 发数据是一层一层的封包;收数据是一层一层的解包。

 tcp协议:首先发生连接的请求,创建好双向的连接,而后才能进行客户端和服务器端的传输,接收到数据之后回复肯定后丢掉原有的数据再关闭连接。称为可靠协议。

 udp协议:不会创建链接,只有数据一发送出去,就会直接丢掉原有的数据。称为不可靠协议

二 socket模块

 1 socket模块就是一个接口,也是套接字模块。

  2 socket抽象层:就是一个编程接口。

   客户端/服务器架构

          即C/S架构

             在互联网中到处都是C/S架构,就至关咱们是客户端,而服务端就是咱们想要在电脑上查询的内容。

          为什么学习socket必定要先学习互联网协议:

          1.首先:本节课程的目标就是教会你如何基于socket编程,来开发一款本身的C/S架构软件

          2.其次:C/S架构的软件(软件属于应用层)是基于网络进行通讯的

          3.而后:网络的核心即一堆协议,协议即标准,你想开发一款基于网络通讯的软件,就必须遵循这些标准。

          4.最后:就让咱们从这些标准开始研究,开启咱们的socket编程之旅    

  socket层                     

 3 socket模块的经常使用方法:

  AF_UNIX:一台机器直接的通讯

  AF_INET:基于网路的通讯

  socket.socket():获取套接字对象。

  listen:监听连接数量

  accept:等待客户端连接。

  connect:连接服务端

  socket.SOCK_STREAM:tcp协议,也是一个数据流

  send:发送消息

  recv:接收消息

  decode:解码

  encode:编码

  SO_REUSEADDR:重用ip和端口

服务器端:

import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.bind(('127.0.0.1',8091))
phone.listen(5)
while True:
    conn,addr=phone.accept()
    while True:
        try:
            print(conn.recv(1024).decode('utf-8'))
            msg=input('>>>:')
            if not msg:continue
            conn.send(msg.encode('utf-8'))
        except Exception:
            break
    conn.close()
phone.close()

 客户端:

import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('127.0.0.1',8091))
while True:
    msg=input('>>>')
    phone.send(msg.encode('utf-8'))
    if not msg:continue
    print(phone.recv(1024).decode('utf-8'))
phone.close()

 

服务端套接字函数
s.bind()    绑定(主机,端口号)到套接字
s.listen()  开始TCP监听
s.accept()  被动接受TCP客户的链接,(阻塞式)等待链接的到来

客户端套接字函数
s.connect()     主动初始化TCP服务器链接
s.connect_ex()  connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

公共用途的套接字函数
s.recv()            接收TCP数据
s.send()            发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)
s.sendall()         发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)
s.recvfrom()        接收UDP数据
s.sendto()          发送UDP数据
s.getpeername()     链接到当前套接字的远端的地址
s.getsockname()     当前套接字的地址
s.getsockopt()      返回指定套接字的参数
s.setsockopt()      设置指定套接字的参数
s.close()           关闭套接字

面向锁的套接字方法
s.setblocking()     设置套接字的阻塞与非阻塞模式
s.settimeout()      设置阻塞套接字操做的超时时间
s.gettimeout()      获得阻塞套接字操做的超时时间

面向文件的套接字的函数
s.fileno()          套接字的文件描述符
s.makefile()        建立一个与该套接字相关的文件

       socket是什么  

      Socket是应用层与TCP/IP协议族通讯的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在

    Socket接口后面,对用户来讲,一组简单的接口就是所有,让Socket去组织数据,以符合指定的协议。

      因此,咱们无需深刻理解tcp/udp协议,socket已经为咱们封装好了,咱们只须要遵循socket的规定去编程,写出的程序天然就是遵循tcp/udp标准的。

相关文章
相关标签/搜索