unix网络编程之tcp客户端/服务端程序(1)

来源:互联网 发布:原味内衣淘宝 编辑:程序博客网 时间:2024/05/29 11:43

参考资料:《UNIX网络编程 卷1:套接字联网API》

文章:《Linux进程状态(ps stat)之R、S、D、T、Z、X》(转载)

测试环境:虚拟机+Fedora18、win7+SocketTool.exe

 服务端程序如下:

#include"unp.h"intmain(int argc, char **argv){intlistenfd, connfd;pid_tchildpid;socklen_tclilen;struct sockaddr_incliaddr, servaddr;listenfd = Socket(AF_INET, SOCK_STREAM, 0);bzero(&servaddr, sizeof(servaddr));servaddr.sin_family      = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port        = htons(SERV_PORT);Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));Listen(listenfd, LISTENQ);for ( ; ; ) {clilen = sizeof(cliaddr);connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);if ( (childpid = Fork()) == 0) {/* child process */Close(listenfd);/* close listening socket */str_echo(connfd);/* process the request */exit(0);}Close(connfd);/* parent closes connected socket */}}
#include"unp.h"voidstr_echo(int sockfd){ssize_tn;charbuf[MAXLINE];again:while ( (n = read(sockfd, buf, MAXLINE)) > 0)Writen(sockfd, buf, n);if (n < 0 && errno == EINTR)goto again;else if (n < 0)err_sys("str_echo: read error");}

编译后运行!

这时可使用SocketTool.exe连接上来,端口为9877,ip为fedora的ip地址

用命令查看

#netstat -a

可看到 第一条,服务端正处在监听状态,

查看进程间的关系,可用如下命令:

#ps -t pts/6 -o pid,ppid,tty,stat,args,wchan
此处运行出错,因我使用终端不是 tty,故改用如下命令:

#ps  -o pid,ppid,tty,stat,args,wchan

Z为僵死进程

为清楚看出父子进程关系,可用如下命令:
#ps -axjf