socket套接字(字节序、地址转换)
什么是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套接字(字节序、地址转换)的更多相关文章
- socket套接字编程
一.概述 1.socket是一种进程间通信方式,既可以用于一台机器,也可以用于网络.常用语C/S模型. 2.可以跨越Windows和Linux操作系统,可以跨越不同语言. 3.注意网络字节序和主机字节 ...
- 网络编程--Socket(套接字)
网络编程 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中 有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后 如何可靠高效的进行数据传输.在 ...
- socket套接字TCP API
socket套接字TCP API socket概念 socket又称"套接字",是计算机网络中进程间通信数据通道的一个端点.或称之为句柄.IP地址+port号就能够唯一确定一个so ...
- c# 主机和网络字节序的转换 关于网络字节序和主机字节序的转换
最近使用C#进行网络开发,需要处理ISO8583报文,由于其中有些域是数值型的,于是在传输的时候涉及到了字节序的转换. 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有两种字节顺序, ...
- 19 网络编程--Socket 套接字方法
1.Socket(也称套接字)介绍 socket这个东东干的事情,就是帮你把tcp/ip协议层的各种数据封装啦.数据发送.接收等通过代码已经给你封装好了 ,你只需要调用几行代码,就可以给别的机器发消息 ...
- Linux之socket套接字编程20160704
介绍套接字之前,我们先看一下传输层的协议TCP与UDP: TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UD ...
- 8.7 day28 网络编程 socket套接字 半连接池 通信循环 粘包问题 struct模块
前置知识:不同计算机程序之间的数据传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...
- Java网络编程(一)Socket套接字
一.基础知识 1.TCP:传输控制协议. 2.UDP:用户数据报协议. 二.IP地址封装 1.InetAddress类的常用方法 getLocalHost() 返回本地主机的InetAddress对象 ...
- socket套接字编程 HTTP协议
socket套接字编程 套接字介绍 1. 套接字 : 实现网络编程进行数据传输的一种技术手段 2. Python实现套接字编程:import socket 3. 套接字分类 >流式套接 ...
随机推荐
- 从Linux源码看Socket(TCP)的bind
从Linux源码看Socket(TCP)的bind 前言 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情. 今天笔者就来从Linux源码的角度看下Server ...
- centos下安装mongodb 通过shell脚本
#! /bin/bash yum -y update echo -e "开始安装mongodb\n" download_url=https://fastdl.mongodb.o ...
- linux(fedora30):安装/配置maven(maven3.6.1)
一,maven的用途 1,用途 Maven 是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理 maven可以用来: 帮用户下载jar包, 有依赖包时自动下载所需的依赖包 打包war包或ja ...
- jquery1.9+,jquery1.10+ 为什么不支持live方法了?
live() 替换成 on() die() 替换成off() 根据jQuery的官方描述,live方法在1.7中已经不建议使用,在1.9中删除了这个方法.并建议在以后的代码中使用on方法来替代. o ...
- String题目解析1
Java又不是C++,什么时候字符数组等于字符串了(对这句话我不负责任)? 而常量池中的字符串,只有变量名不同是可以用双等号判断是否相等的,内存都是常量池中的字符串. 但是new出来的字符串,只能用e ...
- find for /f 分割字符串 bat
@Echo off::总用例数For /f "tokens=2" %%i in ('Type bat.txt^|Find "Ran"') do (Echo %% ...
- Hbase实用技巧:全量+增量数据的迁移方法
摘要:本文介绍了一种Hbase迁移的方法,可以在一些特定场景下运用. 背景 在Hbase使用过程中,使用的Hbase集群经常会因为某些原因需要数据迁移.大多数情况下,可以跟用户协商用离线的方式进行迁移 ...
- router-view组件在app.vue中渲染不出来怎么办
1.在app.vue使用router-view组件直接渲染 页面什么都没显示,可能问题出在路由配置上了,检查路由是否配置完好,路由挂载那里必须使用routes属性 2.在app.vue中router- ...
- 4G工业路由器的传输功率是越高越好吗?
现在人们越来越多的利用运营商网络进行家庭的Wi-Fi上网,早已是非常普遍的事情了.而无线路由器作为设备组网的重要组成部分,与路由器相关的话题.知识总会能够引发大家的热议.这里,以众山物联网研发.生产的 ...
- 老板下了死命令,要把日志系统切换到Logback
Log4j 介绍过了,SLF4J 也介绍过了,那接下来,你懂的,Logback 就要隆重地登场了,毕竟它哥仨有一个爹,那就是巨佬 Ceki Gulcu. 就在昨天,老板听我说完 Logback 有多牛 ...