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

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

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

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

 服务端程序如下:

#include	"unp.h"

int
main(int argc, char **argv)
{
	int					listenfd, connfd;
	pid_t				childpid;
	socklen_t			clilen;
	struct sockaddr_in	cliaddr, 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"


void
str_echo(int sockfd)
{
	ssize_t		n;
	char		buf[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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值