somehow1002的专栏

好记性不如烂笔头

UDP实现迭代型网络通信

UDP是无连接不可靠的数据报协议,因此与TCP不同,UDP协议中客户端不需要和服务器建立连接。 总体流程: pic here 服务端流程: 1.初始化套接字 2.bind 3.recvfrom 4.sendto int main(int argc, char **argv) { int...

2017-05-23 16:55:36

阅读数:148

评论数:0

预分配线程(prethreading)

预分配线程(prethreading)是让服务器在启动阶段创建一个线程池,每个客户请求由当前可用线程池中的某个闲置线程处理 1.初始版本:每个客户一个线程 int main(int argc,char **argv){ int listenfd,connfd; void sig_...

2017-05-23 16:48:56

阅读数:190

评论数:0

预先派生子进程(preforking)

预先派生子进程(preforking)是让服务器在启动阶段调用fork创建一个子进程池。每个客户请求由当前可用子进程池中的某个闲置子进程处理。 预先派生子进程服务器程序 1.初始版本(accept无上锁保护) static int nchildren; static pid_t *pids; ...

2017-05-23 16:44:35

阅读数:190

评论数:0

线程化TCP

线程版本 使用fork创建子进程进行处理,这种代价是昂贵的。我们可以将其改写为线程版本。   使用线程的str_cli函数 static int sockfd; static FILE *fp; void str_cli(FILE *fp_arg,int sockfd_arg){ cha...

2017-05-23 16:39:29

阅读数:203

评论数:0

非阻塞IO

以前各个版本套接字的默认状态是阻塞的,这样带来的时间消耗是巨大的。我们可以修改其为非阻塞版本。 非阻塞式IO方式重写str_cli函数 void str_cli(FILE *fp,int sockfd){ int maxfdp1,val,stdineof; ssize_t n,...

2017-05-23 16:36:30

阅读数:201

评论数:0

select与shutdown

我们已经实现了一个基本的并发回射服务器程序,但是依然存在问题。 如果当客户端阻塞于标准输入时,服务器进程可能因为各种原因结束了。服务器TCP虽然正确的给客户端TCP发送了一个FIN,但是客户端进程正阻塞在标准输入上,可能很长时间之后才能接受到这个信息。 针对这个问题,可以使用IO复用方法来解决...

2017-05-23 16:31:33

阅读数:263

评论数:0

网络编程常用函数

bzero 将目标字节串中制定数目的字节置为0 inet_pton int inet_pton(int family,const char *strptr,void *addrptr) p(presentation)代表表达,n(numeric)代表数值 int_pton将ip地...

2017-05-23 16:26:04

阅读数:239

评论数:0

TCP实现标准客户/服务模式(停-等模式)

服务端流程: 1.初始化套结字 2.bind 3.listen 4.阻塞于accept,等待客户端连接 5.有客户端连接到达,父进程通过fork创建子进程对其处理,父进程关闭连接,继续监听 程序: int main(int argc,char **argv) { int listenfd...

2017-05-23 16:21:03

阅读数:136

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭