53.1 socket 套接字

53.1.1 介绍

  • Socket(套接字)是一种通讯机制,它包含一整套的调用接口和数据结构的定义,它给应用进程提供了使用如 TCP/UDP 灯网络协议进行网络通讯的手段
  • Linux 中的网络编程通过 socket 接口实现,socket 既是一种特殊的 IO,提供对应的文件描述符。
  • 一个完整的 socket 都由一个相关描述{协议, 本地地址, 本地端口, 远程地址, 远程端口};每一个 socket 有一个本地的唯一 socket,由操作系统分配

  

53.1.2 创建 socket

  

  • 函数说明:

    • socket 创建在内核中,若创建成功返回内核文件描述表中的 socket 描述符
  • 函数参数:
    • domain:

      • AF_INET:IPV4 因特网域
      • AF_INET6:IPV6 因特网域
      • AF_UNIX, AF_LOCAL:UNIX 域,本地域
      • AF_NETLINK:内核用户接口设备
      • AF_UN SPEC:未指定
    • type:指定采用何种协议
      • SOCK_STREAM:流式的套接字可以提供可靠的、面向连接的通讯流。它使用了 TCP 协议。TCP 保证了数据传输的正确性和顺序性。
      • SOCK_DGRAM:数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错。使用数据报协议 UDP 协议
      • SOCK_RAW:原始套接字允许对低层协议如 IP或 ICMP 直接访问,主要用于新的网络协议实现的测试灯
      • SOCK_SEQPACKET:长度固定、有序、可靠的面向链接报文传递
    • protocol:
      • 通常为0, 表示按给定的域和套接字类型选择默认协议
  • 返回值:成功,则返回描述符;失败,则返回 -1

53.2 字节序

53.2.1 字节序介绍

  • 不同体系结构的主机使用不同的字节序存储器中保存多字节整数。字节存储顺序不同,有的系统是高位在前,低位在后,而有的系统是低位在前,高位在后
  • 字节序分为大端和小端字节序
  • 网络协议使用网络字节序,即大端字节序

  

53.2.2 字节序转换函数

  网络传输的数据大家是一定要统一顺序的。所以对于内部字节表示顺序和网络字节顺序不同的机器,就一定要对数据进行转换。

  

53.3 地址结构

53.3.1通用地址结构

  #include <sys/socket.h>

  

  __SOCKADDR_COMMON (sa_) 等价于  unsigned short sa_family

  • sa_data 包含了一些远程电脑的地址、端口和套接字的数目,它里面的数据是杂融在一起的
  • sa_family 一般来说,IPV4 使用 AF_NET
  • 在传递给需要地址结构的函数时,把指向该结构的指针转换成(struct sockaddr *)传递进去

53.3.2 因特网地址结构

  IPV4 地址

  

  

  • sin_:sin_family,Internet 地址族如 AF_INET(主机字节序)
  • sin_port:端口号,16位值(网络字节序)
  • sin_addr:Internet 地址,32位 IPV4 地址(网络字节序)
  • sin_zero:填 0(为了格式对齐的填充位)
  • 上面两个数据类型是等效的,可以互相转换,通常使用 sockaddr_in 更为仿表

53.3.3 IPV4 地址族和字符地址间的转换

  

  • 函数功能:网络字节序转换成点十分制
  • 函数参数:
    • af:Internet 地址族,如 AF_INET
    • src:Internet 地址,32位IPV4 地址(网络字节序)
    • dst:地址字符串(点分十进制)指针
    • size:地址字符串大小
  • 返回值:成功,则返回地址字符串指针;出错,则返回 NULL

  

  • 函数功能:点十分制转换为网络字节序
  • 函数参数:
    • af:Internet 地址族,如 AF_INET
    • src:地址字符串(点分十进制)指针
    • dst:Internet 地址,32位IPV4 地址(网络字节序)
  • 返回值:成功,则返回 1;无格式返回0;出错,则返回 -1

53.3.4 填写 IPV4 地址族结构案例

  

五十三、linux 编程——TCP 编程基本介绍的更多相关文章

  1. Socket网络编程-TCP编程

    Socket网络编程-TCP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.socket介绍 1>.TCP/IP协议 2>.跨网络的主机间通讯 在建立通信连接的 ...

  2. 五十四、linux 编程——TCP 编程模型

    54.1 编程模型介绍 54.1.1 TCP 客户端服务器编程模型 客户端调用序列 调用 socket 函数创建套接字 调用 connect 连接服务器端 调用 I/O 函数(read/write) ...

  3. 36 - 网络编程-TCP编程

    目录 1 概述 2 TCP/IP协议基础 3 TCP编程 3.1 通信流程 3.2 构建服务端 3.3 构建客户端 3.4 常用方法 3.4.1 makefile方法 3.5 socket交互 3.4 ...

  4. c++ 网络编程(五) LINUX下 socket编程 多种I/O函数 -以及readv和writev函数用法

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614056.html 一.多种I/O函数 前言:之前我们讲的数据传输一般Linux上用writ ...

  5. 五十四 网络编程 TCP编程

    Socket是网络编程的一个抽象概念.通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 客户端 大多数连接都是可靠 ...

  6. [Python 网络编程] TCP编程/群聊服务端 (二)

    群聊服务端 需求分析: 1. 群聊服务端需支持启动和停止(清理资源); 2. 可以接收客户端的连接; 接收客户端发来的数据 3. 可以将每条信息分发到所有客户端 1) 先搭架子: #TCP Serve ...

  7. Linux下TCP网络编程与基于Windows下C#socket编程间通信

    一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使s ...

  8. 【转】基于Linux下的TCP编程

    http://blog.csdn.net/tigerjibo/article/details/6775534 一.Linux下TCP编程框架 TCP网络编程的流程包含服务器和客户端两种模式.服务器模式 ...

  9. 63 网络编程(四)——TCP编程

    TCP编程 TCP编程是面向连接的数据传输,所以需要时用IO流来建立连接. 用户输出流到服务器,服务器输入流接收数据. 服务器输出流到用户,用户输入流接收. 基本流程 服务器端 创建服务器端:Serv ...

随机推荐

  1. Postgres 优雅存储树形数据

    碰到一个树形数据需要存储再数据控制,碰到以下两个问题: 在PG数据库中如何表达树形数据 如何有效率的查询以任意节点为Root的子树 测试数据 为了更加简单一些,我们将使用一下数据 Section A ...

  2. 安装mysql8.0.12

    安装mysql8.0.12 https://blog.csdn.net/zwj1030711290/article/details/80039780 问题1:忘记记录日志打印的密码就把窗口给关了 解决 ...

  3. Linux(CentOS7)下如何配置多个Tomcat容器

    一.Linux版本 二.上传并解压apache-tomcat-7.0.90压缩包,然后复制粘贴出来多个tomcat 解压缩 tar -xzvf apache-tomcat-7.0.90.tar.gz ...

  4. 如何取消Microsoft账户登录电脑

    手贱用Microsoft账户登录了一下笔记本里面的日历,TNND微软直接就把你电脑的登录账户直接改成了微软账户,花了1个小时才搞回去. 步骤如下: 0--脑残微软的设计,点了下日历,弹出下面这个,绝对 ...

  5. June. 27th 2018, Week 26th. Wednesday

    To be great, truly great, you have to be the kind of person who makes the others around you great. 要 ...

  6. Linux云计算运维-Redis

    Redis简介 Redis是一款开源的,ANSI C语言编写的,高级键值(key-value)缓存和支持永久存储NoSQL数据库产品. Redis采用内存(In-Memory)数据集(DataSet) ...

  7. maven打包如何跳过测试

    Maven打包如何跳过测试?正常来说,不应该这样做,因为测试可以避免很多麻烦排除一些不必要的错误,前提是测试足够规范,这里主要指junit测试,如果junit测试有问题的话,将会直接影响到mvn in ...

  8. 转载:img是什么元素?置换元素?

    转载: https://blog.csdn.net/kingliguo/article/details/52643594 img是什么元素? 应是行内元素,判断一个元素是行内元素,还是块元素,无非就是 ...

  9. day09(垃圾回收机制)

    1,复习 文件处理 1.操作文件的三步骤 -- 打开文件:硬盘的空间被操作系统持有 | 文件对象被应用程序持续 -- 操作文件:读写操作 -- 释放文件:释放操作系统对硬盘空间的持有 2.基础的读写 ...

  10. mysql主主配置

    数据安装完成后 配置信息  开启二进制文件复制 [client]port=3306[mysqld]basedir=/usr/local/mysqldatadir=/usr/local/mysql/da ...