socket编程(一)---- 套接字
1. 套接字基础
套接字是一种网络API(应用程序编程接口),可以使应用它开发网络程序。套接字接口提供一种进程间通信的方法,使得在相同或不同的主机上的进程能以相同的规范进行双向信息传送。进程通过调用套接字接口来实现相互之间的通信,而套接字接口又利用下层的网络协议功能和系统调用实现实际的通信工作。
进程之间要进行通信,首先要调用网络编程接口,由套接字负责将进程接收和发送的请求信息通过下层的网络通信协议服务接口(TCP/IP)向上或者向下交付,所以套接字接口是应用层到传输层的接口。
2. 套接字类型
SOCK_STREAM:流式套接字
SOCK_DGRAM:数据报套接字
SOCK_RAW:原始套接字
3. 套接字地址结构
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 */
};
/* Internet address. */
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};
可以在Linux下产看man手册
man 7 ip
以上为常用套接字地址结构,除此之外还有通用套接字地址结构
struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ char sa_data[14]; * 14 bytes of protocol address */ }
4. 常用IP地址转换函数
#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);
in_addr_t inet_network(const char *cp);
char *inet_ntoa(struct in_addr in);
struct in_addr inet_makeaddr(int net, int host);
in_addr_t inet_lnaof(struct in_addr in);
in_addr_t inet_netof(struct in_addr in);
可通过Linux的man手册查看 man inet_addr