地址转换:aton\atoa,ascii,network,32bit与ascii转换 大端小端转换 字节充转换:htons\htonl\htohs\ntohl.网络序与主机序转换。 主机名转换为IP地址: struct hostent *gethostbyname(const char *hostname) struct hostent { char *h_name; char *h_aliases; int h_addrtype; int h_length; char **h_addr_list; } sock编程常用函数: socket创建一个socket bind绑定IP地址的端口号到socket connect连接服务器 listen设定服务器允许的最大连接数 accept等待客户端socket连接请求 send发送数据 recv接收数据 基于TCP服务器: a.使用socket函数创建socket b.使用bind函数绑定IP地址、端口信息到socket上 c.使用listen设置允许的最大连接数 d.使用accept等待客户端连接请求,阻塞等待。 e.使用send/recv或者read/write收发数据 f.关闭连接 基于TCP客户端: a.使用socket创建socket b.设置要连接的服务器的IP地址和端口的属性 c.使用connect连接服务器 d.使用send/recv或者read/write收发数据 e.关闭连接 基于UDP服务器: a.使用socket创建一个socket b.使用bind绑定地址、端口信息到socket c.使用recvfrom循环接收数据 d.关闭连接 基于UDP客户端: a.使用socket创建一个socket b.使用bind绑定地址、端口信息到socket c.设置对方的IP地址、端口等属性 e.使用sendto发送数据 f.关闭连接 并发服务器模型: 循环服务器:在同一时刻只能响应一个客户端请求 并发服务器:服务器同一时刻可以响应多个客户端请求 实现方法: UDP服务器每次从套接字上读取一个客户端的夜请求---处理---然后将结果返回给客户端。 socket(); bind(); while(1) { recvfrom(); process(); sendto(); } TCP循环服务器接受一个客户端连接,然后处理,完成这个客户端所有请求后,断开连接: socket(); bind(); listen(); while(1); { accept(); process(); close(); } TCP并发服务器: 并发服务器思想是每一个客户机的请求并不是由服务器直接处理,而是由服务器创建子进程来处理: socket(); bind(); listen(); while(1) { accept(); if(fork()==0) { process(); close(); exit(); } close(); }