• 网络编程


    网络的链接使用:我们学习编程就是为了可以进行相互间的数据信息交流,而要进行远距离的交流这就需要链接网络

    链接网络的话我们要知道什么是互联网?

             其实互联网就是一堆协议来规范标准,从而达到相互间的交流

             1.物理层   发送二进制格式(电信号的高低电压)

    2.数据链路层  

    a.给二进制信号赋予意义  

    b.以太网协议(ethernet) : 数据包或数据帧(head:18字节) 和data:46-1500字节)    c. mac(计算机)唯一标识

    3.网络层 

    a. ip协议:网络部分是找到目标局域网 和 主机部分找到目标计算机

    4.传输层  TCP/UDP  port端口号 用于识别应用程序

    5.会话层

    6.表达层

    7.应用层

    通常我们把会话层,表达层和应用层合并. 在传输层和应用层之间我们有一个套接字即socket来编程

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

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

             TCP服务端

    import socket
    server=socket.socket()
    server.bind(('127.0.0.1',9333))
    server.listen(10)
    while True:
        c,addr=server.accept()
        while True:
            data=c.recv(1024).decode('utf-8')
            print(data)
            if not data:
                c.close()
                break
            c.send(data.upper().encode('utf-8'))
    server.close()

             TCP客服端

    import socket
    c=socket.socket()
    c.connect(('127.0.0.1',9333))
    while True:
        msg=input('>>>: ')
        if not msg:
            break

        c.send(msg.encode('utf-8'))
        data = c.recv(1024).decode('utf-8')
        print(data)
    c.close()

    什么是粘包?

           指接收数据是不知道要从哪开始到哪结束.

    粘包发生的情况?

             发送端需要等缓冲区满才发送出去,造成粘包

             接收端不及时接收缓冲区的包,造成粘包

    解决粘包?

    使用报头即先把要接收的长度告知对方(可用struct模块 )

  • 相关阅读:
    java
    EL表达式详解
    SVN的安装与配置
    javascript高级程序设计学习笔记
    java基础知识
    javascript高级程序设计学习笔记Chapter 5: Reference Types
    javascript模态,非模态窗体
    javascript执行顺序
    javascript的执行顺序2
    自动补全+汉字拼音双查(1)数据库
  • 原文地址:https://www.cnblogs.com/zhouhai007/p/9911053.html
Copyright © 2020-2023  润新知