网络编程知识点小结


目录

网络编程知识点回顾

一、协议

1.c/s和b/s架构

c/s:客户端和服务器

b/s:浏览器和服务器,本质上还是客户端和服务器

2.osi五层

  • 物理层:高低压电信号
  • 数据链路层:数据报、mac地址
  • 网络层:IP协议和端口号(IP可以通过arp协议,和mac地址进行转换)
  • 传输层:TCP和UDP协议

TCP:基于数据流的可靠协议(三次握手、四次挥手)

UDP:基于数据报的不可靠协议

  • 应用层:http协议,邮件协议等

二、 socket

在传输层和应用层之间的一层抽象层,可以操作网络层和传输层

1.用套接字实现tcp协议的通信

2.用套接字实现的UDP协议的通信

3.发生粘包的两种情况

  • 发送端需要等缓冲区满才发送出去,造成粘包(发送时间间隔很短,数据又很小,会合到一起,产生粘包)
  • 接收端不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次手的时候还是从缓冲区呐上次一流的数据,产生粘包)

4.解决粘包的问题

  • 为字节流加上固定的报头,报头中含有字节流的长度,一次send到对端,对端在接收时,先从缓存中取出定长的报头,然后再取真实数据。

    struct()模块,将数据长度打包为四个int型的字节

  • 把报头做成字典,字典里面包含将要发送的真实数据的信息,,然后json序列化,然后用struck将序列化后的数据长度打包成4个字节,一同send到对端

    发送时:
    先发报头长度
    再编码报头内容然后发送
    最后发真实内容
    
    
    接收时:
    先手报头长度,用struct取出来
    根据取出的长度收取报头内容,然后解码,反序列化
    从反序列化的结果中取出待取数据的详细信息,然后去取真实的数据内容
    

5.UDP协议

  • 用udp实现简单通信

    #服务器
    import socket
    soc= socket.socket(socket.AF_INET,socket.SOCK_DGRAM)  #socket.SOCK_DGRAM是UDP协议
    soc.bind(('127.0.0.1',8080))   #绑定地址和端口号
    while True:  #通信循环
        data,addr = soc.recvfrom(1024)  #无需等待接收和监听
        print(data)
        soc.sendto(data.upper(),addr)  #将处理好的数据发送给客户端
    #客户端
    import socket
    soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)  #实例化一个对象
    while True: #通信循环
        msg= input('请输入数据>>>').strip()
        msg = msg.encode('utf8')  #将数据转化为bytes格式
        soc.sendto(msg,('127.0.0.1',8080))
        data = soc.recvfrom(1024)   #接收数据
        print(data[0]) #打印数
  • udp的特点:

    可以发送空内容

    不需要建立连接

    客户端和服务端谁断开都不影响发送

    不会粘包

6.socketserver模块

1) socketserver模块实现TCP简单通信

服务端

* 导入模块
* 定义一个类
* 类中必须重新handle方法
* handle里面写一些简单的逻辑
* `if __name__ == '__main__':`
* 实例化一个socketserver对象:`soc= socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyTcp)`
* `soc.serve_forever() `

客户端:用socket模块就行

2)socketserver模块实现UDP简单通信

书写步骤同上

优质内容筛选与推荐>>
1、编程珠玑阅读笔记之算法小伎俩
2、【Android Studio】E/memtrack: Couldn't load memtrack module (No such file or directory)【待解决】
3、电脑新建svn仓库
4、mysql+apache+php
5、celery


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn