近学习unix网络编程,感觉东西零零碎碎,比较混乱。因此决定整理以下,发一个小博客。一来可以与大家分享以下,二来可以总结提高一下所学的东西。话说:竹子为什么长的高,因为它喜欢总结阿~~^_^
  废话不多说了,上代码。小弟半路出家,入行不深,过路大神不喜勿喷阿,嘿嘿~~^_^
  程序是一个基于tcp的 C/S .简单回显功能( 声明以下,不要以为注释是英语说我是在哪里下载的,原因是我运行程序 汉字老显示乱码,改成蹩脚英语了 )。
  首先是一个自己的库
1 #ifndef MYLIB_H
2 #define MYLIB_H
3
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <netinet/in.h>
7 #include <sys/socket.h>
8 #include <arpa/inet.h>
9 #include <unistd.h>
10 #include <string.h>
11 #include <errno.h>
12 #include <signal.h>
13 #include <sys/wait.h>
14
15 #define    LISTENQ        1024
16 #define    MAXLINE        1460
17 #define SERV_PORT 9877
18
19 typedef void (*SignalFunc)(int);
20
21 SignalFunc signal(int sigNo,SignalFunc fun);
22 void sig_chld(int sigNo);
23 void sys_err(char *pa);
24
25 #endif // MYLIB_H
  这些是需要的头文件和一些宏定义,服务端和客户端都需要,我都把他们搞一块儿了,这样方便,叫mylib.h 。
  哦,先大致解释一下:
  1、signal    这个函数是用来捕获信号的。后边服务端会用到,在服务端在细说
  2、sig_chld 是signal捕获到信号后的处理函数
  3、sys_err 用来输出提示,并退出进程
  下边是头文件里函数的实现,里边的函数如果没看太懂可以先不用理解,后边会细说,哈哈
1 #include <mylib.h>
2
3 void sys_err(char *pa)
4 {
5     printf("%s",pa);
6     exit(1);
7 }
8
9 SignalFunc  signal(int sigNo, SignalFunc fun){
10     struct  sigaction act  ,  oact;
11     act.sa_handler=fun;
12     sigemptyset(&act.sa_mask);    //Additional set of signals to be blocked.
13     act.sa_flags=0;
14     if(sigaction(sigNo,&act,&oact)<0)
15         return SIG_ERR;
16     return oact.sa_handler;
17 }
18
19 void sig_chld(int sigNo)
20 {
21     pid_t pid;
22     int state;
23     while ((pid=waitpid(-1,&state,WNOHANG))>0) {
24         printf("process %d terminated ",pid);
25     }
26     return;
27 }