这两天总结写了一个LinuxC下面的多进程socket通信的交互程序,收获良多。特别是对fork进程复制函数有了进一步的了解。同时对socket的处理有了更好掌握:
服务器端
socket 初始化
bind 与地址的绑定 用到 sockaddr_in
listen 监听
建立一个死循环
accept 接收一个请求
fork 复制一个进程
子进程 返回值0
再次 fork 创建子进程的子进程
返回非零是父进程 推出 exit
孙子进程处理任务(因为其主进程以及死亡,所以其进程有Init接管)
主进程waitpid 主进程的子进程很快结束退出,而接管他的子孙进程已经脱离主进程非init进程托管
最后处理善后的接管释放等动作
客服端比较简单
直接
socket 初始化
sockaddr_in 初始化
connect 连接实现绑定
write 请求
read 请求
有一个问题在socket通信的过程中read 和 write 最好指定读取的数据实际长度,否则可能会出现异常:
1、太短 数据没读取全
2、太长 会使得一直在请求 知道timeout在断开
还有个问题就是write 和 read 并不一定会真实的返回你指定的写或者读的数据长度,需要循环去处理他。
完毕,下午又要搞PHP一会儿,无聊……
本文详细介绍了使用Linux下的多进程进行Socket通信的具体实现方法。包括服务器端的socket初始化、监听及客户端的连接过程。特别强调了fork进程复制函数的应用及read/write操作的实际长度指定的重要性。
289

被折叠的 条评论
为什么被折叠?



