zoukankan      html  css  js  c++  java
  • 网络编程

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

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

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

             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模块 )

  • 相关阅读:
    臭氧总量下载网址
    WRF遇到的问题
    linux 查询硬盘、内存、cpu命令
    降维中的特征选择
    偏最小二乘回归分析建模步骤的R实现(康复俱乐部20名成员测试数据)+补充pls回归系数矩阵的算法实现
    R语言机器学习之caret包运用
    用R语言做数据清理(详细教程)
    RColorBrewer的使用
    VOD, TVOD, SVOD FVOD的区别(转)
    Include promo/activity effect into the prediction (extended ARIMA model with R)
  • 原文地址:https://www.cnblogs.com/zhouhai007/p/9911053.html
Copyright © 2011-2022 走看看