socket编程
慎薇
这个作者很懒,什么都没留下…
展开
-
socket编程之并发服务器(CS模型改进2)
我们用fork实现并发服务器的核心代码:原创 2017-08-11 14:12:15 · 363 阅读 · 0 评论 -
处理SIGCHLD信号(CS模型改进4)
在上篇博客提到的SIGCHLD信号就是由内核在任何一个进程终止时发给它的父进程的一个信号。那我们怎么处理僵死进程呢?处理僵死进程我们显然不愿意存留僵死进程。它占用内核空间,最终可能导致我们耗尽进程资源,无论何时我们fork子进程都要wait它们,以防止它们变成僵死进程。原创 2017-08-17 11:10:32 · 231 阅读 · 0 评论 -
CS模型之服务器进程终止
现在我们启动我们的客户/服务器,然后杀死服务器子进程。这是在模拟服务器进程崩溃的情况,我们可从中查看客户将发生什么。原创 2017-08-17 11:46:03 · 594 阅读 · 0 评论 -
基于linux系统的CS模型实现
(一) CS模型也就是TCP的客户/服务器模型,我们这里用一个简单的回射客户/服务器模型来进行模拟验证。客户发送数据,服务器接收到数据,并将数据原封不动的返回给客户端。原创 2017-08-11 11:00:57 · 1093 阅读 · 0 评论 -
SO_REUSEADDR用法
1、一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。TCP,先调用close()的一方会进入TIME_WAIT状态。SO_REUSEADDR提转载 2017-08-11 14:08:31 · 1278 阅读 · 0 评论 -
socket编程之点对点聊天程序
点对点聊天程序并解决上一篇中父进程退出,子进程不退出情况原创 2017-08-11 14:15:09 · 1614 阅读 · 0 评论 -
socket编程之解决流协议的粘包问题(一 )
流协议和粘包这么说吧,TCP在传输数据的时候,是不区分边界的(数据和数据之间没有边界),因为是基于字节流,所以数据对TCP来说就是一大堆没有结构区别的字节块。那意味着什么?意味着TCP并不能对多个数据的整体的信息进行区分(打个比方:就像是你说一堆话没有标点符号全部连在一起,别人很可能弄错)或者对单个整体信息的错误区分(比如你要发送的整块数据被分成了好几块发送,然后这些数据在传输过程中可能由于网络原因原创 2017-08-11 14:32:20 · 1404 阅读 · 1 评论 -
socket编程之解决流协议的粘包问题(二)
背景常见的应用层协议都是带有可变长字段的,字段之间的分隔符用换行'\n'的比用'\0'的更常见,如HTTP协议。可变长字段的协议用readn来读就很不方便了,为此我们实现一个类似于fgets的readline函数。原创 2017-08-11 15:16:38 · 458 阅读 · 0 评论 -
TCP状态测试(CS模型改进3)
本文测试TCP的11中状态,更深入理解CS模型。尽管我们TCP程序很小,然而对于我们弄清客户和服务器如何启动,如何终止,更为重要的是当发生某些错误(例如客户主机崩溃,客户进程崩溃,网络连接断开,等等)时将会发生什么,本例十分重要。只有弄清这些边界条件以及TCP/IP协议的相互作用,我们才能写出能够处理这些情况的健壮的客户和服务器程序。原创 2017-08-17 10:26:24 · 403 阅读 · 0 评论