最近由于项目需要,要学习网络编程有关的知识,socket以前在学网络的时候搭建过,不过这次要将服务器用守护进程跑起来,经过查找资料终于有点一知半解,并且实现了守护进程和socket的结合,赶紧记录下来。
一. socket是什么?
在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。
网络中的进程是通过socket来通信的。
二. socket基本操作?
1. socket()
2. bind()
3. listen()
4. connect()
5. accept()
6. read()
7. write()
8. close()
三. 守护进程是什么?
守护进程:生存期长,在系统引导装入时启动,在系统关闭时终止,没有控制终端,只在后台运行。所有守护进程的父进程都是init进程
一个或多个进程构成进程组,一个或多个进程组构成会话组
守护进程编程规则:
- 创建子进程,父进程退出(使得子进程成为孤儿进程,孤儿进程运行一段时间后,由init进程统一接管)
调用setsid创建一个新的会话,并担任该会话组的组长.setsid的作用如下:
成为新会话组的首进程
成为一个新进程组的首进程
脱离控制终端
改变当前目录为根目录—chdir(“/“);
- 重设文件权限掩码—umask(0);—-对所有权限都开放
关闭不再需要的文件描述符—–
for(i=0;i<MAXFILE;i++)
{
close(i);
}
四. linux下如何将socket和守护进程应用起来?
由于项目保密性需要,这个可以参考一个网址linux下守护进程和socket应用的例子,我对代码进行了修改,如将read()、write()函数替换成了send()、recv()函数,实现了服务器有守护进程跑着,客户端可随时对服务器发送request,服务器解析之后返回response。
相关代码还是等毕设之后吧~