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