随笔分类 -  【18】UNIX/Linux 网络编程

摘要:之前曾经学习过一对回射客户/服务器程序的例子,不过那个是基于TCP协议的。本文将讲解另一对回射客户/服务器程序,该程序基于UDP协议。 由于使用的协议不同,因此编写出的程序也有本质上的区别,应将它们对比来进行理解。 阅读全文
posted @ 2017-05-19 14:02 穆晨 阅读(730) 评论(0) 推荐(0)
摘要:在网络套接字编程中,我们可以通过设置套接字选项让网络协议按照我们预想的方式工作。本文教你如何获取当前的套接字选项,以及如何设置套接字选项。 阅读全文
posted @ 2017-05-19 14:00 穆晨 阅读(738) 评论(0) 推荐(0)
摘要:在上文中,我使用select函数实现了不为客户连接创建子进程的并发回射服务器( 点此进入 )。但其中有个细节确实有点麻烦,那就是还得设置一个client数组用来标记select监听描述符集中被设置为监听位的位。 有没有方法简化这个处理呢? 阅读全文
posted @ 2017-05-19 13:55 穆晨 阅读(285) 评论(0) 推荐(0)
摘要:在此前,我已经介绍了一种并发回射服务器实现( 点此进入 )。它通过调用fork函数为每个客户请求创建一个子进程。同时,我还为此服务器添加了自动消除僵尸子进程的机制。现在请想想,在客户量非常大的情况下,这种为每个客户请求都创建子进程的做法是不是太费资源了?我们可不可以在不为每个客户请求都创建子进程的前提下实现并发回射服务器? 阅读全文
posted @ 2017-05-19 13:54 穆晨 阅读(298) 评论(0) 推荐(0)
摘要:批量处理是指将原先的输入重定向到一个输入文件,这样客户端将连续向服务器发送该文件中的数据,然后接收到服务器的回射数据后,再将其写入到另一个文件中。在这样的情况下,原来的客户端程序不能够再正确运行了。那么会发生什么问题?我们又该如何修改客户端程序才能使之正确工作呢? 阅读全文
posted @ 2017-05-19 13:52 穆晨 阅读(293) 评论(0) 推荐(0)
摘要:在看过前文:初探IO复用后,想必你已对IO复用这个概念有了初步但清晰的认识。 接下来,我要在一个具体的并发客户端中实现它(基于select函数),使得一旦服务器中的客户进程被终止的时候,客户端这边立即得到通知并返回异常。 阅读全文
posted @ 2017-05-19 13:50 穆晨 阅读(548) 评论(0) 推荐(0)
摘要:在之前的文章中,我具体实现了一个并发回射服务器并给它加载了僵尸子进程的自动清理信号机制。在正常情况下,它已经可以很好地工作了,但它能否合理应对一些特殊情况呢? 阅读全文
posted @ 2017-05-19 11:07 穆晨 阅读(251) 评论(0) 推荐(0)
摘要:在之前的回射程序中,实现了字符串的传递与回射。幸运的是,字符串的传递不用担心不同计算机类型的大小端匹配问题,然而,如果传递二进制数据,这就是一个要好好考虑的问题。在客户端和服务器使用不同的字节序格式的情况下传递二进制数据,会导致异常。此外,客户和服务器表示整型的位数不同也可能导致传递整型异常。 阅读全文
posted @ 2017-05-19 10:58 穆晨 阅读(1191) 评论(0) 推荐(1)
摘要:在之前的文章中,我对回射程序做了分析,但那一次的分析是基于正常执行的。本文将说明在各种异常情况下该程序的执行情况。 阅读全文
posted @ 2017-05-19 10:49 穆晨 阅读(283) 评论(0) 推荐(0)
摘要:在上篇中,我们已经发现了原来的并发回射程序隐藏的问题 - 僵尸子进程。 而在本篇中,我们将通过Linux的信号机制,将这些不该存于世间的“ 僵尸 ”通通清理掉。 阅读全文
posted @ 2017-01-29 12:39 穆晨 阅读(257) 评论(0) 推荐(0)
摘要:本文将分为两个部分,第一部分具体实现一对并发回射服务器/客户程序( 看过前面那篇文章的这部分可不看 重复了 );第二部分为服务器添加僵尸子进程自动清理机制。 那么服务器具体怎么实现并发?怎么会有僵尸进程?僵尸进程又是什么?如何处理这些僵尸进程 ... 本文将为你一一解惑。 阅读全文
posted @ 2017-01-29 12:33 穆晨 阅读(287) 评论(0) 推荐(0)
摘要:基于TCP的一对回射客户/服务器程序及其运行过程分析( 上 )的执行分析。 阅读全文
posted @ 2017-01-29 12:26 穆晨 阅读(267) 评论(0) 推荐(0)
摘要:本文将讲解一对经典的客户/服务器回射程序,感受网络编程的大致框架( 该程序稍作改装即可演变成各种提供其他服务的程序 );同时,还将对其运行过程加以分析,观察程序背后协议的执行细节,学习调试网络程序的技巧。 阅读全文
posted @ 2017-01-29 12:22 穆晨 阅读(340) 评论(0) 推荐(0)
摘要:知道套接字描述符,如何获取这个套接字连接的相关信息呢?显然,这是一个必须要清楚的问题。 阅读全文
posted @ 2017-01-29 12:20 穆晨 阅读(441) 评论(0) 推荐(0)
摘要:一个服务器,通常会在一段时间内接收到多个请求。如果非要等到处理完一个请求再去处理下一个,势必会造成大部分用户的不满( 尤其当有某个请求需要占用大量时间时 )。 如何解决这个问题?让处理这些用户请求的进程并发起来吧! 阅读全文
posted @ 2017-01-29 12:18 穆晨 阅读(243) 评论(0) 推荐(0)
摘要:在TCP通信中要使用到几个非常经典的函数,本文将对这几个函数进行一个简短的使用说明。 阅读全文
posted @ 2017-01-29 12:12 穆晨 阅读(1254) 评论(0) 推荐(0)
摘要:IP地址在套接字地址结构中是以结构体in_addr方式存放的,这种结构体也叫做IP参数的数值格式。当我们要将IP参数存进套接字地址结构,显然要先将其转换为数值格式。下面将介绍几个函数,能很好的实现转换功能。这些函数都包含在头文件 arpa/inet.h 中。 阅读全文
posted @ 2017-01-29 12:04 穆晨 阅读(274) 评论(0) 推荐(0)
摘要:我们知道,数据在主机内的存放有两种模式,也就是说,主机字节序有两种:大端和小端( 这里假定读者已经清楚这个问题 )。但在网络通信中,要求通信数据( 通信数据这里指IP号和端口号 )的使用必须用网络字节序。什么又是网络字节序? 阅读全文
posted @ 2017-01-29 12:01 穆晨 阅读(808) 评论(0) 推荐(0)
摘要:本文通过一对经典的时间获取客户/服务器程序,展现了Linux网络编程的大体框架,为以后更深入的学习打下基础。 阅读全文
posted @ 2017-01-29 11:55 穆晨 阅读(655) 评论(0) 推荐(0)
摘要:为何TCP ”四次分手“ 的过程中会有一个TIME_WAIT状态?这个状态有什么意义呢?这是网络中的一个经典问题,本文将给出精简的回答。 阅读全文
posted @ 2017-01-29 11:53 穆晨 阅读(285) 评论(0) 推荐(0)