什么是socket:
  socket可以看成是用户进程与内核网络协议栈的编程接口。
  socket不仅可以用于本机的进程间通信,还可以用于网络上
  不同主机之间的进程通信。
IPv4套接口地址结构
  struct  sockaddr_in{
  uint8_t    sin_len;  //整个sockaddr_in结构体的长度
  sa_family_t    sin_family;  //指定地址家族(不仅可用于tcp ip也可用于UNIX域协议)。AF_INET(ipv4)
  in_port_t    sin_port;  //16位端口
  struct in_addr   sin_addr;  //32位地址
  char   sin_zero[8];  //保留字段
  }

  struct in_addr{
  in_addr_t   s_addr;  //无符号32位整数
  }

1、网络字节序:规定为大端字节序。主机可能是大端字节序也可能小端字节序
2、大端字节序:高位存放于低内存,低位存放于高内存
3、小端字节序:高位存放于高内存,低位存放于低内存

主机字节序---->网络字节序------>主机字节序

  下面是一个测试主机字节序的程序

#include <stdio.h>
int main(void)
{
unsigned int x=0x12345678;
unsigned char *p=(unsigned char *)&x;
printf("%0x,%0x,%0x,%0x\n",p[0],p[1],p[2],p[3]);//低地址放低位78.小端字节序
return 0;
}

字节序转换函数

1、uint32_t htonl(unit32_t   hostlong);   //32位主机字节序转换为网络字节序
2、uint16_t htons(uint16_t   hostshort);   //16位主机字节序转换为网络字节序
3、uint32_t ntohl(uint32_t   netlong);  //32位网络字节序转换成主机字节序
4、uint16_t ntohs(uint16_t   netlong);  //16位网络字节序转换成主机字节序
  h:host    n:network    s:short    l:long(int)

#include <stdio.h>
#include<arpa/inet.h>
int main(void)
{ unsigned int x=0x12345678;
unsigned char *p=(unsigned char *)&x;
printf("%0x,%0x,%0x,%0x\n",p[0],p[1],p[2],p[3]);//低地址放低位78.小端字节序 unsigned int y=htonl(x);
p=(unsigned char *)&y;
printf("%0x,%0x,%0x,%0x\n",p[0],p[1],p[2],p[3]);//网络字节序(大端)
return 0;
}

地址转换函数:

1、in_addr_t inet_addr(const  char*cp);  //点分十进制的地址(192.168.0.100)转换成32位整数(网络字节序)
2、char * inet_ntoa(struct in_addr   in);   //网络字节序地址结构转换成点分十进制
3、int inet_aton(const char * cp, struct in_addr*  inp);   //和第一个相同,将点分十进制转换成32位整数

 1 #include <stdio.h>
2 #include<arpa/inet.h>
3 int main()
4 {
5 unsigned long addr=inet_addr("192.168.0.100");//将其转换成网络字节序
6 printf("addr=%u\n",ntohl(addr));//转成主机字节序号,无符号输出
7
8 struct in_addr ipaddr;
9 ipaddr.s_addr=addr;
10 printf("Ip=%s\n",inet_ntoa(ipaddr));//网络字节序地址转换成点分十进制
11 return 0;
12 }

socket套接字(字节序、地址转换)的更多相关文章

  1. socket套接字编程

    一.概述 1.socket是一种进程间通信方式,既可以用于一台机器,也可以用于网络.常用语C/S模型. 2.可以跨越Windows和Linux操作系统,可以跨越不同语言. 3.注意网络字节序和主机字节 ...

  2. 网络编程--Socket(套接字)

    网络编程 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中 有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后 如何可靠高效的进行数据传输.在 ...

  3. socket套接字TCP API

    socket套接字TCP API socket概念 socket又称"套接字",是计算机网络中进程间通信数据通道的一个端点.或称之为句柄.IP地址+port号就能够唯一确定一个so ...

  4. c# 主机和网络字节序的转换 关于网络字节序和主机字节序的转换

    最近使用C#进行网络开发,需要处理ISO8583报文,由于其中有些域是数值型的,于是在传输的时候涉及到了字节序的转换. 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有两种字节顺序, ...

  5. 19 网络编程--Socket 套接字方法

    1.Socket(也称套接字)介绍 socket这个东东干的事情,就是帮你把tcp/ip协议层的各种数据封装啦.数据发送.接收等通过代码已经给你封装好了 ,你只需要调用几行代码,就可以给别的机器发消息 ...

  6. Linux之socket套接字编程20160704

    介绍套接字之前,我们先看一下传输层的协议TCP与UDP: TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UD ...

  7. 8.7 day28 网络编程 socket套接字 半连接池 通信循环 粘包问题 struct模块

    前置知识:不同计算机程序之间的数据传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...

  8. Java网络编程(一)Socket套接字

    一.基础知识 1.TCP:传输控制协议. 2.UDP:用户数据报协议. 二.IP地址封装 1.InetAddress类的常用方法 getLocalHost() 返回本地主机的InetAddress对象 ...

  9. socket套接字编程 HTTP协议

    socket套接字编程  套接字介绍  1. 套接字 : 实现网络编程进行数据传输的一种技术手段  2. Python实现套接字编程:import  socket  3. 套接字分类 >流式套接 ...

随机推荐

  1. bootStrap小结2

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  2. GeoServer发布shapfile字段名和值乱码问题解决

    摘要: 网上说了一大堆方法又是转格式咯又是改源代码了,修改很简单: 修改Styles下的你的style: Xml代码 修改Stores下你的图层的属性,设置 DBF charset为GBK 以上设置G ...

  3. 查询MS sql server里的所有表 SQL中所有列,说明,类型 查询总存储过程数

    1.查询SQL中的所有表: Select TABLE_NAME FROM   "你的数据库名称".INFORMATION_SCHEMA.TABLES Where TABLE_TYP ...

  4. laytable 前台删除后加载当前页数据。

    laytable一次性获取数据后,点击删除调用后台删除.返回成功状态后刷新当前页数据. 渲染方法: //渲染表格 function renderingTable(pageIndex, sourceDa ...

  5. Redis五种常用数据类型

    string 字符串常用操作 1.存入字符串键值对  SET key value 2.批量存储字符串键值对  MSET key value [key value ...] 3.获取一个字符串键值  G ...

  6. naicat如何查看表关系

    1.navict版本为:navict premium https://www.php.cn/tool/navicat/427617.html 参考上面链接 2. 这个版本的 目前就这些,后续进行补充

  7. 浅谈1——用Eclipse调试JAVA程序

    本篇博客主要介绍如何用Eclipse调试简单的JAVA程序. 1.如下图,一个简单的JAVA程序  2.设置断点. 方法:选中需设置断点的行代码,按快捷键Ctrl+Shift+B,设置断点: 断点设置 ...

  8. Ngnix01

    Nginx(一)------简介与安装   目录 1.Nginx 的简介 2.Nginx 的常用功能 3.Nginx 安装 ①.下载地址 ②.Windows 版本安装 ③.Linux 版本安装 说到 ...

  9. deconv的弊端

    https://chuansongme.com/n/2630693453218 学习到deconvlution会带来棋盘鬼影,比较重要的解决方法就是resize-deconvlution

  10. 执行 vue inspect > output.js 报错,无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue.ps1,因为在此系统中禁止执行脚本

    无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue.ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 "get-help ab ...