文档介绍:LINUX应用编程–网络编程篇
2010年8月12日
2
一、字节排序函数
在主机字节顺序与网络字节顺序间转换
#include </>
主机字节序网络字节序
uint16_t htons(uint16_t val);
uint32_t htonl(uint32_t val);
网络字节序主机字节序
uint16_t ntohs(uint16_t val);
uint32_t ntohl(uint32_t val);
3
二、地址转换函数
#include <arpa/>
in_addr_t inet_addr(const char *strIP);
若成功,返回32位网络字节序的地址,若出错,则返回NADDR_NONE
不建议使用,
int inet_aton(const char *strIP, struct in_addr *addr);
若成功,返回1,若地址字符串有错,返回0,仅转换IPV4地址
int inet_pton(int family, const char *strptr, void *addrptr);
返回:1成功,0-输入不是有效的表达式,-1出错
Family:6,
地址转换函数
char *inet_ntoa(struct in_addr inaddr);
返回:指向字符串IP的指针。
例:char *ip = inet_ntoa();
const char *inet_ntop(int family, const void *addr, char *strIP, size_t len);
参数:family –地址族,6
addr –需要转换的地址
返回:指向字符串IP的指针,失败返回NULL;
例:char ip[64];
inet_ntop(, &, ip, 64);
4
5
三、地址结构定义及变量定义
struct sockaddr{
sa_family_t sa_family;
char sa_data[14];
};
struct sockaddr_in{
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
};
typedef uint32_t in_addr_t;
struct in_addr{
in_addr_t s_addr;
};
通用套接字地址:
6
四、基本的TCP套接口函数及调用流程
7
四、基本套接字函数
1. socket()
int socket(int family, int type, int protocol);
功能描述:创建套接字文件描述字。
参数:family –协议族
-------- IPV4协议()
6-------- IPV6协议
AF_LOCAL-------- UNIX域协议(PF_LOCAL)
AF_ROUTE------- 路由套接口
type –套接字类型
SOCK_STREAM -------- 字节流套接口(TCP及AC_LOCAL时)
SOCK_DGRAM --------- 数据报套接口(UDP及AC_LOCAL时)
protocol –取0
返回:成功为非负描述字,失败返回-1
例子:int fd = socket(, SOCK_STREAM, 0);
8
四、基本套接字函数
2. connect()
int connect(int sockfd, const struct sockaddr *addr, socklen_t len);
功能描述:建立从客户端到服务器的连接
返回:成功返回0,失败返回-1
例子:
int sock;
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
sock = socket(, SOCK_STREAM, 0);
= ;
//转换IP和端口到网络字节序
= htons(port);
// = inet_addr(“”);
inet_pton(, “”, &);
if(connect(sock, (struct sockaddr*