【网络编程】TCP/IP (客户端--服务端)

      最后更新:2022-07-30 23:36:42 手机定位技术交流文章

      数据链层:通过各种控制协议,故障的物理通道被转化为无故障、无功
      可靠的数据链用于传输数据帧.
      MAC(物理地址)48位
      网络层: 选择和传输数据包.
      IP 地址有分 IPV4 (32位)和 IPV6 (128位)两种类别格式,(主机号和网络号构成)
      传输层:传输层为应用程序层提供进程间通信路径(TCP/UDP/SCTP)。
      OSI 7,TCP/IP 5
      寄快递,ip /协议 发送的数据大小有限制。
      可靠的 tcp/ip-oriented连接流式服务
      请添加图片描述

      • 主机和网络字符串
        主机序列分为大端序列(高位、低地址)和小端序列。
        两个不同的字符串序列的主机发送数据,这可能令人困惑。 换句话说,一个大端序列叫做网络序列。
        因此,整数数据被发送到网络上,被定义为大端序列字节
        当数据被发送时,它将从(长序、短序主机转换为网络)接收相反的数据。
      • linux通过四个函数完成主机和网络字符串之间的转换。头文件:#include <netinet/in.h>

      套接字:
      通过插座接收和传输数据(相当于手机)
      ip和端口填充到套接字的地址(结构体sockaddr中)
      #include <bits/socket.h>

      socket

      • 人们习惯使用十进制字符串IPV4地址,但在编程中我们需要先转换它们
        若要使用整数方程,下列函数可以用于表示点对点的十进制公式字符串IPV4所代表的地址和网络字符串序列整数IPV4地址之间的转换:
        IPV6以网络字节顺序显示地址

      bind()设置主机IP地址和端口

      1. 通用接口地址结构:
        sockaddr

      2. 特别的索克地址结构:
        IPV4:
        TCP/IP协议家族sockaddr_in:设置ip端口
        IPV6:
        sockaddr_in6

      听队列

      1,存储不到三个握手的链接。
      2,保存完成三次的链接

      accept()

      accept()处理存放在 listen 创建的已完成三次握手的队列中的连接。每处理一个连接,则
      accept() 返回连接的相应的插座字符描述符。
      如果队列空, 封锁.

      connect()

      一般由客户端程序执行。 指定服务器端的IP地址和端口。
      握手三次,创建一个链接

      send()/recv

      接收和传输数据。 将数据写入缓冲器并读入缓冲器

      close()

      关闭TCP链接并继续四次挥手
      请添加图片描述

      在写程序之前ping 127.0.0.0看看客户端是否与服务器连接。

      服务器端:

      struct sockaddr_in saddr,caddr;//设置主机IP地址和端口的特殊接口地址结构
      memset(&saddr,0,sizeof(saddr));//将初始值置为0
      saddr.sin_family = AF_INET;//设置地址组协议
      saddr.sin_port = htons(6000);//端口/ 小端存放转大端存放-----主机字节序列转网络字节序列
      // 当数据被发送时,它将从(长序、短序主机转换为网络)接收相反的数据。
      saddr.sin_addr.s_addr = inet_addr("0.0.0.0");//设置ip地址

      saddr存储服务器端的IP地址和端口。
      int len = sizeof(caddr);//caddr客户端成功地连接了。caddr为客户端主机存储的IP地址和端口号码。

      客户端

      先启动服务器端
      在启动客户端
      最后发数据
      请添加图片描述

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/30967.html

          热门文章

          文章分类