Socket
Linux
中的网络编程通过socket
实现,它是一种文件描述符。
socket
有如下3
种类型:
- 流式套接字(
SOCK_STREAM
):流式的套接字提供可靠的、面向连接的通讯流,它使用了TCP
协议。 - 数据报套接字(
SOCK_DGRAM
):数据报套接字提供不可靠的、无连接的通讯流,它使用了UDP
协议。 - 原始套接字(
SOCK_RAW
):原始套接字可以对低层协议直接进行访问,例如IP
或ICMP
。
地址转换
IP
地址通常用数字加点的形式表示,例如192.168.0.1
。struct in_addr
使用的IP
地址是由32
位整数表示的。
为了进行转换,可以使用下面2
个函数:
int inet_aton ( const char *cp, struct in_addr *inp );
char *inet_ntoa ( struct in_addr in );
inet_aton
是将a.b.c.d
形式的IP
地址转换为32
位的IP
地址,并存储在inp
指向的内存。inet_ntoa
是将32
位IP
地址转换为a.b.c.d
的格式,并返回地址字符串。
字节序转换
不同类型的CPU
对变量的字节存储顺序可能是不同的:
- 有的
CPU
是高位在前,低位在后。 - 有的
CPU
是低位在前,高位在后。
网络传输的数据顺序要求是统一的。可以使用如下转换函数:
htons
:把unsigned short
类型数据从主机序转换到网络序。htonl
:把unsigned long
类型数据从主机序转换到网络