
socket编程
零下10度C_zjw
关注计算机互联网发展的点点滴滴
展开
-
SIGPIPE信号
SIGPIPE信号详解当服务器端kill掉一个已连接的子进程时(也就是close一个连接),如果客户端不理会 该操作,反而写入更多的数据到服务器上,会发生什么呢?这种情况是可能发生的,举例来说,客户可能在读回任何数据之前执行两次针对服务器的写操作,而RST是由其中第一次写操作引发的。适用于此的规则是:当一个进程向某个已收到RST的套接字执行写操作时,内核向该进程发送一个SIGPIPE信号。原创 2017-03-28 16:00:14 · 1264 阅读 · 0 评论 -
bind函数—绑定地址和端口
在调用bind函数是,可以指定一个端口号,或指定一个IP地址,也可以两者都指定,还可以都不指定。服务器在启动时捆绑它们的众所周知端口。如果一个TCP客户或服务器未曾调用bind捆绑一个端口,当调用connect或listen时,内核就要为相应的套接字选择一个临时端口。让内核来选择临时端口对于TCP客户来说是正常的,除非应用需要一个预留端口;然而对于TCP服务器来说却极为罕见,因为服务器原创 2017-03-27 22:11:22 · 10329 阅读 · 0 评论 -
回射客户-服务器模型(1)
最近在学习socket编程,根据自己的学习过程及学习笔记,下面来梳理一下如何实现一个简单的回射客户-服务器模型,也借此来熟悉一下socket、bind、listen、accept、connect这些函数的使用。下面先看一下一个客户/服务器模型的框架图。可以看到,服务器创建过程一般是:1)创建套接字,使用socket函数,这个时候的套接字是主动套接字;2)初始化服务器原创 2017-02-23 23:55:23 · 794 阅读 · 0 评论 -
回射客户-服务器模型(3)
前面连接的C/S模型只是单方面的客户端发送数据,服务器端接收数据。那么本节将根据前两节已有的经验知识来实现一个简单的点对点聊天程序。注:这里只实现了以个服务器与一个客户端的相互收发数据。下面这篇文章对整个回射客户服务器的模型建立过程有一个说明,我这里就不再做过多讲解。由于刚刚接触网络编程,中间可能会有纰漏,还请大家多多指正。点击打开链接服务器端:p2psrv.c#inclu原创 2017-02-25 21:15:08 · 312 阅读 · 0 评论 -
回射客户-服务器模型(4)
由于TCP是一种基于字节流的传输,属于无边界传输,所以它不能够处理消息与消息之间的边界问题,因此存在粘包问题。如下图所示:M1和M2是从主机A传送到主机B的两条消息,那么中间可能有几种传输情况:a. 两条消息刚好分别完整的传输;b. 先传输M1和M2的一部分,然后M2的另一部分单独传输;c. 先传输M1的一部分,然后M1的另一部分和M2一起传输;粘包产生的原原创 2017-03-05 11:59:14 · 406 阅读 · 0 评论 -
用select改进回射客户-服务器模型
这一节主要来说一下如何用select函数来改进我们前面的客户端-服务器模型。前面我们在处理多客户端模型时,每当连接一个客户端时,服务器端就需要开辟一个新的进程来处理新的客户端,这样就会耗费很大的内存资源。而select函数允许进程指示内核等待多个事件中的任何一个发生,并只有在有一个或多个事件事件发生或经历一段指定的时间后才唤醒它。或者说select具有管理多个I/O的能力,对于多个套接口,原创 2017-03-05 15:46:24 · 473 阅读 · 0 评论 -
回射客户-服务器模型(2)
在上一节“回射客户-服务器模型(1)”中存在下面几个问题。1.就是当服务器断开再立即重新开启时,需要重新绑定地址,而此时的服务器处于TIME_WAIT状态,在这种状态下,它是无法立即重新绑定的。那么这种情况下,我们可以使用REUSEADDR这个选项来解决这个问题。使用REUSEADDR选项就可以不必等待TIME_WAIT状态消失就可以立即重启服务器。我们只需在服务器端的代码中使原创 2017-02-24 15:55:54 · 505 阅读 · 0 评论