什么是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. MeteoInfoLab脚本示例:FY-3A AOD HDF数据

    FY3A卫星有HDF格式的AOD产品数据,全球范围,分辨率为0.05度.读取数据文件变量后要重新设定X/Y维,数据是Y轴反向的,且需要除以10000得到AOD值. 脚本程序: #Add data fi ...

  2. MeteoInfo家族的新产品:MeteoInfoLab

    为了更方便地处理各种数据并绘图,尝试开发了一个新的软件产品MeteoInfoLab,软件设计上参考了MatLab和Spider.软件以脚本程序和命令行交互为主,基于MeteoInfo库并利用Jytho ...

  3. linux centos 03

    linux用户权限相关 root用户  相当于qq群的群主 sudo命令  相当于qq群的管理员 普通用户  相当于qq群的 水军 超级用户root的UID是 0  组ID也是 0  普通用户的UID ...

  4. go 结构体函数

    package main import "fmt" type Dog struct { Name string } func (d *Dog) speak() string { r ...

  5. spring boot:使用mybatis访问多个mysql数据源/查看Hikari连接池的统计信息(spring boot 2.3.1)

    一,为什么要访问多个mysql数据源? 实际的生产环境中,我们的数据并不会总放在一个数据库, 例如:业务数据库:存放了用户/商品/订单 统计数据库:按年.月.日的针对用户.商品.订单的统计表 因为统计 ...

  6. python 安装matplotlib

    下载minianaconda 安装 进入cmd下 conda create --name python37 python=3.7  创建python3.7环境 conda activate pytho ...

  7. python 爬取简书评论

    import json import requests from lxml import etree from time import sleep url = "https://www.ji ...

  8. php-ffmpeg 操作视频/音频文件

    php-ffmpeg 是一个php操作视频/音频文件的类库. GitHub地址:https://github.com/PHP-FFMpeg/PHP-FFMpeg/ 使用composer快速安装:com ...

  9. hystrix线程池隔离的原理与验证

    引子 幸福很简单: 今天项目半年规划被通过,终于可以早点下班.先坐公交,全程开着灯,买了了几天的书竟然有时间看了.半小时后,公交到站,换乘大巴车.车还等着上人的功夫,有昏暗的灯光,可以继续看会儿书.过 ...

  10. 拖拽编写SVG图形化工具(二)

    getAttributesNs/setAttributesNs element.setAttributeNS(namespace,name,value) namespace 是指定属性的命名空间的一个 ...