• 网络编程基础


    1.网络的作用:数据通信,资源共享,负载均衡
    2.IP地址作用:寻址,标记网络层实体,保证实体之间消息的正确接收,通俗理解为区分网络上的主机
    3.ip信息查询 :
    windows:
    ubuntu:ifconfig
    4.ip地址
    版本分类:IPv4,IPv6
    IPv4 32位二进制数,4组每组8位 构成:类别号+网络号+主机号
    分类
    A:0+7位网络号+24位主机号
    B:10+14位网络号+16位主机号
    C:110+21位网络号+8位主机号
    D:用于多点广播(多播)
    E:保留
    5.端口:留给主机上的程序与外界通信的借口,
    端口号:区分同一个主机的程序,同一个主机上可能运行多个程序与外界进行网络通信,仅仅通过ip地址
    分配:范围0-65535
    知名端口:0-1023 分配给常用功能与基本程序,事先分配好的,不建议改动
    动态端口:1024-65535 自定义分配

    6.标识主机:网络层IP地址,标识进程:传输层协议+端口
    7.套接字socket:进程间通信的一种方式,与其他进程间通信不同的是可实现不同主机间的进程通信
    发送信息步骤(udp socket):
    1.创建套接字 实例化socket socket.socket(参数)
    参数一:地址簇
    socket.AF_INET IPv4(默认)
       socket.AF_INET6 IPv6
    socket.AF_UNIX 只能够用于单一的Unix系统进程间通信

    参数二:协议类型

      socket.SOCK_STREAM  流式socket , for TCP (默认)
      socket.SOCK_DGRAM   数据报式socket , for UDP

    2.准备接收方的地址 det_addr = (ip字符串,端口号)
    3.获取数据 send_data=
    4.开始发送 实例.sendto(send_data.encode("utf-8"),dest_addr) 用socket发送的数据必须是字节码byte类型
    5.关闭套接字实例 实例.close()
    可以不用绑定ip和端口,系统会分配本地ip和随机端口
    接收信息步骤:
    1.创建套接字
    2.绑定本地相关信息(ip+端口号)必须是本机相关信息
    local_addr = (ip字符串,端口号) ip字符串一般为空,表示本机任何一个ip
    实例.bind(local_addr)
    3.等待接收对方发送的数据
    recv_data = 实例.recvfrom(能接收的最大字节数) recv_data是一个元组(接收到的数据,(发送方ip,port))
    4.解码数据 recv_data[0].decode()
    5.关闭socket
    8.私有IP 国际规定有一部分ip用于局域网使用,属于私网IP,不在公网中使用
    范围 10.0.0.0-10.255.255.255
    172.16.0.0-172.31.255.255.255
    192.168.0.0-192.168.255.255
    9.socket属于全双工,可同时收发
    10.TCP和UDP区别:
    TCP UDP
    面向连接 无连接
    有序数据传输
    面向字节流 面向报文
    传输效率低、全双工(发送缓存、接收缓存) 效率高
    可靠 不可靠
    重发丢失的数据包
    舍弃重复的数据包
    无差错数据传输 尽最大努力交付
    阻塞/流量控制 无拥塞控制
    应用:Web浏览器、电子邮件、文件传输程序。 应用:域名系统 (DNS);视频流;IP语音(VoIP)。
    11.TCP socket创建客户端步骤步骤:(一般不绑定端口)
    1.创建tcp套接字
    实例化socket socket名称 = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    2.创建链接
    socket实例名.connect((服务器ip字符串,服务器端口))
    3.发送/接收
    实例名.send(信息字符串.encode("utf-8"))

    4.关闭套接字
    实例名.close()

    12.TCP socket创建服务器端步骤:
    1.创建tcp套接字
    socket名称 = socket。socket(ocket.AF_INET,socket.SOCK_STREAM)
    2.绑定ip和port
    实例名.bind((ip字符串,端口号)
    3.监听(将socket由主动连接变成被动接受连接的模式)
    实例名.listen(128)
    4.等待客户端的链接
    子连接socket、客户端地址 = 客户端实例名.accept()
    5.接收和发送数据
    data = 子连接socket.recv(最大字节数) 当客户端发来数据或者客户端socket关闭时,recv解堵塞
    子连接socket.send(数据字符串.encode("uft-8"))

    6.关闭套接字
    子连接socket.close()
    服务器socket实例.close()
  • 相关阅读:
    更改sql server数据库所有者的对象
    对C#委托及事件委托的理解
    印度人是怎样开发软件的?
    SQL常用函数
    Ajax学习1
    Ajax学习2
    什么是ORM?
    jQuery 移动网页到制定的位置
    Juery 控件的取值赋值
    js禁用滚动条
  • 原文地址:https://www.cnblogs.com/burningcarbon/p/11220182.html
Copyright © 2020-2023  润新知