网络编程start

《Unix网络编程》第一卷中第一个测试程序,客户端建立与服务器的链接并返回时间。当然,测试之前需要下载好unp.h等源码包。www.unpbook.com

下载源代码包和解压放好路经参考http://blog.csdn.net/jx232515/article/details/52366416

测试这个程序需要客户端程序和服务器程序,

客户端程序:intro/daytimetcpcli.c

#include	"unp.h"

int
main(int argc, char **argv)
{
	int					sockfd, n;
	char				recvline[MAXLINE + 1];
	struct sockaddr_in	servaddr;

	if (argc != 2)
		err_quit("usage: a.out <IPaddress>");

	if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
		err_sys("socket error");

	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port   = htons(13);	/* daytime server */
	if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
		err_quit("inet_pton error for %s", argv[1]);

	if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
		err_sys("connect error");

	while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
		recvline[n] = 0;	/* null terminate */
		if (fputs(recvline, stdout) == EOF)
			err_sys("fputs error");
	}
	if (n < 0)
		err_sys("read error");

	exit(0);
}

 服务器程序:intro/daytimetcpsrv.c

#include	"unp.h"
#include	<time.h>

int
main(int argc, char **argv)
{
	int					listenfd, connfd;
	struct sockaddr_in	servaddr;
	char				buff[MAXLINE];
	time_t				ticks;

	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(13);	/* daytime server */

	Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));

	Listen(listenfd, LISTENQ);

	for ( ; ; ) {
		connfd = Accept(listenfd, (SA *) NULL, NULL);

        ticks = time(NULL);
        snprintf(buff, sizeof(buff), "%.24s
", ctime(&ticks));
        Write(connfd, buff, strlen(buff));

		Close(connfd);
	}
}

 注意:这个两个程序的编译都写在同目录下的makefile文件中了,所以编译通过make来就行了

测试这个简单的程序,需要在客户端和服务器端都运行上相应的程序。最简单的,就是自己当服务器自己当客户端。

打开两个终端窗口,一个运行上服务器程序:./dayrimetcpsrv

另一个终端窗口,运行上客户端程序:./daytimetcpcli <IP地址:linux环境可通过ifconfig查看>

原文地址:https://www.cnblogs.com/weiyi-mgh/p/6638141.html