socket(一)
来源:互联网 发布:网络模拟软件 编辑:程序博客网 时间:2024/06/18 14:33
一、什么是socket
socket可以看成是用户进程与内核网络协议栈的编程接口。socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信。
二、套接口地址结构
IPv4地址结构:
#include <netinet/in.h> struct sockaddr_in { sa_family_t sin_family; /* address family: AF_INET */ in_port_t sin_port; /* port in network byte order */ struct in_addr sin_addr; /* internet address */};sin_family:ipv4应设为AF_INET
sin_port:16位无符号整数,网络字节序
sin_addr:结构体中只有一个成员,32位无符号整数,s_addr
通用地址结构 struct sockaddr{ 。。。};
三、字节序
大端字节序表示高位数据存在低地址,低位数据存在高,地址。小端字节序刚好相反。不同的主机采用不同的字节序,在通信时,需要将主机字节序转换为网络字节序。网络字节序规定为大端字节序,作为统一的标准。
举例:0x12345678,大端字节序内存由低到高依次存的是:12 34 56 78;小端字节序内存由低到高依次存的是78 56 34 12,注意不是87654321,而是以字节为单位!
字节序转换函数:
#include <arpa/inet.h> uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort);
htonl表示4个字节的整数由主机字节序转换为网络字节序;htons表示2个字节的整数由主机字节序转换为网络字节序。
四、地址转换函数
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int inet_aton(const char *cp, struct in_addr *inp); in_addr_t inet_addr(const char *cp); char *inet_ntoa(struct in_addr in);
inet_aton:作用同下。
inet_addr:点分十进制的IP地址转换为一个32位整数,且是网络字节序。
inet_ntoa:将结构体in_addr中32位无符号整数转换为点分十进制的IP地址。
五、套接字类型
0 0
- JAVA(一)|Socket
- Socket(一)
- Socket编程(一)
- socket(一)
- UDP socket(一)
- socket(一)
- Socket编程(一)
- socket编程(一)
- Socket(一)
- socket(一)
- Socket 编程(一)
- socket通信(一)
- Socket学习(一)
- Socket(一)
- Java socket(一)
- Socket基础知识(一)
- socket编程(一)
- socket编程(一)
- mysql远程设置
- JavaScript API 设计原则
- [leetcode]Convert Sorted Array to Binary Search Tree
- OC03 继承、初始化方法、便利构造器-1
- Android Asynchronous Http Client 开发实例——上传文件
- socket(一)
- 二分 Codeforces591D Chip 'n Dale Rescue Rangers
- [LintCode]Count of Smaller Number before itself
- Mahout随机森林算法--分类无标签数据
- Unity3D中常用的数据结构总结与分析
- Makefile中的$的使用
- CSU 1541 判断最小生成树是否唯一
- 使用ViewStub需要注意的一些问题
- 时间与梦想