说明
网络上的IP都是数字加点(192.168.0.1)构成
struct in_addr结构使用32位的IP,如
IP(C0A80001)是192.168.0.1
函数原型
int inet_aton(const char *cp, struct in_addr *inp)
将a.b.c.d的IP转换为32位的IP,存储在 inp指针里面
char *inet_ntoa(struct in_addr in)
将32位IP转换为a.b.c.d的格式
说明
a代表 ascii,n代表network
服务器程序作用
初始化服务器程序
持续监听一个固定的端口
收到客户的连接后建立一个socket连接
与客户进行通信和信息处理
接收客户通过socket连接发送来的数据,创建一个新的socket,
通过socket连接与客户通信,进行相应处理,并返回处理结果
通信结束后中断与客户的连接(关闭socket)
客户程序作用
初始化客户程序
连接到某个服务器上,建立socket连接
与服务器进行通信和信息处理
接收服务器通过socket连接发送来的数据,进行相应处理
通过socket连接向服务器发送请求信息
通信结束后中断与客户的连接
UDP实现框架
没有一个客户端可以一直占用服务端
只要处理过程不是死循环,则服务器对于每一个客户机的请求总是能够满足
socket(...);
bind(...);
while(1)
{
recvfrom(...);
process(...);
sendto(...);
}
TCP实现框架
每次接受一个客户端连接
完成某客户所有请求后,断开连接
socket(...);
bind(...);
listen(...);
while(1){
accept(...);
{
read(...);
process(...);
write(...);
}
close(...);
}
TCP实现框架
s = socket(...);
bind(s, ...);
listen(s, ...);
while(1) {
ns = accept(s, ...);
if(fork(..)==0) {
read(ns, ...);
process(...);
write(ns, ...);
close(ns);
}
}
}
功能描述
客户端
使用线程向服务器发送从标准输入得到的字符
在主线程中将从服务器端返回的字符显示到标准输出
服务器端
将客户端发来的数据原样返回给客户端,每一个客户在服务器上对应一个线程
多路复用I/O
工作机理
进程可在多个socket上等待网络事件,当某个socket发生网络事件时,用户可通过查看网络事件对该socket事件进行I/O操作
要求应用程序不断向内核写入socket描述符,内核还应不断扫描socket集来检测状态
实现途径
预先构造一张描述符表,随后通过select()选择一个已准备好的描述符并返回
应用场景
一个进程中有多个客户连接(存在多个TCP 套接字描述符),select()函数阻塞直到任何一个描述符被激活
避免进程为等待一个已连接上的数据而无法处理其他连接
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
nfds:所有被监控文件描述符中最大的一个加1
readfds:所有要读的文件文件描述符的集合
writefds:所有要写的文件文件描述符的集合
exceptfds:其他需要向我们通知的文件描述符
timeout:超时设置
运行机制
select调用进程一直阻塞直到以下情况之一发生
有文件可以读
有文件可以写
超时所设置的时间到
返回结果
-1:表明函数调用发生错误,错误号存放在errno变量中
0:表明发生超时而没有发生其他的错误
大于0:表明事件发生的文件描述符的数目
void FD_SET(int fd, fd_set *fdset)
将fd加入到fdset
void FD_CLR(int fd, fd_set *fdset)
将fd从fdset里面清除
void FD_ZERO(fd_set *fdset)
从fdset中清除所有的文件描述符
int FD_ISSET(int fd, fd_set *fdset)
判断fd是否在fdset集合中
功能
更多的灵活性,可编写TCP/UDP套接字不能实现的功能
可由用户自己创建各个头部
只能由有root权限的用户创建
函数原型
int sockfd(AF_INET, SOCK_RAW, protocol)
根据protocol(如IPPROTO_ICMP, IPPROTO_TCP, IPPROTO_UDP)创建不同类型原始套接字
原文地址:http://blog.csdn.net/wangzi11322/article/details/45741677