socket编程(一)
来源:互联网 发布:印第安人 知乎 编辑:程序博客网 时间:2024/05/16 09:47
socket
socket 可以看成是用户进程和内核网络协议栈的编程接口。
socket 不仅可以用于本机的进程间通信,还可以用于网络上不同主机进程间的通信。
IPv4套接口地址结构
IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件
struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_zero[8];};
- sin_len: 整个sockaddr_in结构体的长度, 在4.3BSD-Reno版本之前的第一个成员是sin_family。
- sin_family: 指定该地址家族,在这里设置为AF_INET代表IPv4。
- sin_port: 端口
- sin_addr: IPv4的地址。
- sin_zero:暂不使用, 一般将其设置为0。
通用地址结构用来指定与套接字关联的地址
struct sockaddr { uint8_t sin_len; sa_family_t sin_family; char sa_dta[14];
- sin_len: 整个sockaddr结构体的长度
- sin_family:指定该地址家族
- sa_data:由sin_family决定它的形式
字节序:
- 大端字节序(Big Endian)
最高有效位(MSB)存储于最低内存地址处,最低有效位存储在最高内存地址处。 - 小端字节序(Little Endian)
最高有效位存储于最高内存地址处,最低有效位存储于最低内存地址处。
主机字节序:
不同的主机有不同的字节序,如x86为小端字节序,ARM字节序为可配置的。
#include <stdio.h>//测试主机字节序int main(){ int x = 0x12345678; unsigned char *ptr = (unsigned char *)&x; printf("%x %x %x %x\n", ptr[0], ptr[1], ptr[2], ptr[3]); return 0;}
输出:
78 56 34 12
网络字节序:
网络字节序规定为大端字节序。
字节序转换函数:
//在头文件<arpa/inet>中//主机字节序转换为网络字节序uint32_t htonl(uint32_t hostlong);uint16_t htons(uint16_t hostshort);//网络字节序转换为主机字节序uint32_t ntohl(uint32_t netlong);uint16_t ntohs(uint16_t netshort);
unsigned int y = htonl(x); ptr = (unsigned char *)&y; printf("%x %x %x %x\n", ptr[0], ptr[1], ptr[2], ptr[3]);
输出结果:
12 34 56 78
地址转换函数
//地址转换函数//将一个点分十进制的地址转换为网络字节序的地址int inet_aton(const char *cp, struct in_addr *inp);//将点分十进制地址转换为32位整数in_addr_t inet_addr(const char *cp);//将一个网络字节序地址结构转换为点分十进制ip地址char *inet_ntoa(struct in_addr in)
#include <stdio.h>#include <winsock2.h>int main(){ unsigned long addr = inet_addr("192.168.0.100"); printf("addr = %u\n", ntohl(addr)); struct in_addr ipaddr; ipaddr.s_addr = addr; printf("%s\n", inet_ntoa(ipaddr)); return 0;}
输出:
addr = 3232235620192.168.0.100
套接字类型
- 流式套接字(SOCK_STREAM)[TCP]
提供面向连接的、可靠的数据传输服务,数据无差错,无重复的发送,且按发送顺序接收。 - 数据报式套接字(SOCK_DGRAM)[UDP]
提供无连接服务,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。 - 原始套接字(SOCK_RAW)
阅读全文
0 0
- Socket编程(一)
- Socket编程(一)
- socket编程(一)
- Socket 编程(一)
- socket编程(一)
- socket编程(一)
- socket编程(一)
- Java Socket编程(一)
- Java Socket编程(一)
- Java Socket编程(一)
- socket编程原理(一)
- java Socket编程(一)
- python Socket编程(一)
- java socket编程(一)
- Socket编程基础(一)
- java socket编程(一)
- java socket编程(一)
- java socket 编程(一)
- Time and Space Complexity of Recursive Algorithms
- Lint-Code完美平方
- SpringBoot整合RocketMQ
- 一个Java的简单小程序(1)
- MEI代码示例概览
- socket编程(一)
- 操作系统-个人总结与思考
- C/C++语言的简单介绍
- Android动态设置纯色图标的颜色
- linux下为目录和文件设置权限
- CSS选择器小结
- 23种设计模式-(AbstractFactory)抽象工厂
- 【转载】Smart Forms&ScriptFrom 详解 BY 江正军
- Hibernate主题5——缓存机制与可能遇到的问题