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

  • 相关阅读:
    [iOS Animation]-CALayer 图像IO
    weblogic集群
    mysql相关函数及用法
    mysql导出导入数据库
    java多线程实现复制功能并统计进度
    java多线程模拟实现12306售票
    Oracle中的常用数据类型
    jdbc连接mysql和oracle数据库-java
    将字符串插入到光标指定位置-js
    二维数组模拟实现酒店管理系统-java
  • 原文地址:https://www.cnblogs.com/zhouhai007/p/9911053.html
Copyright © 2011-2022 走看看