《unix网络编程》中源码使用方法

原文来自《小华编程网》:《unix网络编程》中源码使用方法

本人最近学习<unix网络编程>这本书,对于我这种刚接触刚入门unix和网络编程的人来说确实有点难。不过我相信万事开头难,就像一个飞行员说过:一旦跨过起跑线,就会离目标越来越近。

      第一步就是解决书中源码的使用,使用源码中写好的一些头文件。我的系统是ubuntu 14.04

              1.下载源码解压,百度unpv13e自行下载

              2.把主目录中的config.h和sctp目录中的unp.h 复制到/usr/include 中去。

              3.把复制好的/usr/include中的unp.h中的 #include”../config.h” 改为 #include”config.h”,在/usr/include中的unp.h中添加#define MAXLINE 2048

               4.尝试编译书中第一个例子,成功解决,最后会贴出经过修改的代码。

               5.不过我这里对第一个例子进行了修改,去掉了err_quit()等函数,而是用peeor()来输出错误。要想使用err_quie等这些函数,可以自己按照书中的来编写一个解决错误的头文件,然后在/usr/include/unp.h中include即可。

cli.c

#include	"unp.h"

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

	if((sockfd = socket(AF_INET, SOCK_STREAM, 0))<0)
	{
		char *errorMsg="socket error";
		perror(errorMsg);
	}

	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port   = htons(12345);	/* daytime server */
	if(inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr)<=0)
	{	
		char *errorMsg="inet_pton error";
		perror(errorMsg);

	}

	if(connect(sockfd, (SA *) &servaddr, sizeof(servaddr))<0)
	{
		char *errorMsg="connect error";
		perror(errorMsg);
	}

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

	exit(0);
}
             我这里使用了本地端口12345而不是13,ip为回环地址127.0.0.1

srv.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(12345);	/* 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\r\n", ctime(&ticks));
        write(connfd, buff, strlen(buff));

		close(connfd);
	}
}
            书本里的例子用到了很多包裹函数,比如上面提到的err_sys等,如果要使用这些函数,先在unpv13e文件夹下找到这些包裹函数的实现,将这些函数include在unp.h文件中既可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值