《UNP》习题1.5源码

首先是服务器程序:

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

int main()
{
    int listenfd, connfd;
    int nWrite;
    int count;
    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( 9999 );

    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) );
        nWrite = strlen(buff);
        for( count=0; count<nWrite; count++ )
            Write( connfd, buff+count, 1 );

        Close( connfd );
    }
    exit(0);
}

然后是客户端程序:

#include <unp.h>

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

    if( 2 != argc )
        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(9999);
    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;
        count++;
        if( fputs(recvline, stdout) == EOF )
            err_sys("fputs error");
    }

    if( n<0 )
        err_sys("read error");
    printf("read times: %d\n", count);
    exit(0);
}

程序运行结果:

[[email protected] UNP]$ ./daytimesrv & ./daytimecli 127.0.0.1

[1] 6126

Thu Jan 15 19:52:21 2015

read times: 1

程序结果说明:

如果客户和服务器运行在同一个主机上,那么计数器的值通常是1,意味着尽管服务器调用了26次write,所写出的数据也仅由客户的一次read返回。

时间: 2024-10-11 17:51:13

《UNP》习题1.5源码的相关文章

Unix NetWork Programming(unix环境编程)——环境搭建(解决unp.h等源码编译问题)

此配置实例亲测成功,共勉,有问题大家留言. 环境:VMware 10 + unbuntu 14.04 为了unix进行网络编程,编程第一个unix程序时遇到的问题,不能包含unp.h文件,这个感觉和apue.h差不多,不过这里需要编译源代码,为了以后方便,现在整理如下: 主要有两点一是生成libunp.a这个库,二是得到unp.h.config.h这两个个头文件. 1,安装编译器,为了齐全还是安装一下build-essential sudo apt-get install build-essen

Thinking in Java 4th(Java编程思想第四版)文档、源码、习题答案(偶尔回顾)

Thinking in Java 4th 中.英文两版pdf文档,书中源码及课后习题答案. 链接:https://pan.baidu.com/s/1knj4bwrw2c_w0jdtGmMShw  提取码:umrp http://greggordon.org/java/tij4/solutions.htm 亦为Thinking in Java 4th英文版的课后习题答案. 使用Eclipse运行Thinking in Java 4rd例子源码:https://blog.csdn.net/u0135

h5微信房卡牛牛源码学习讲解

h5微信房卡牛牛源码Q 2171793408 官网地址: http://wowotouba.com/h5 比较仔细的学习了<c++primer>,并对每个习题都自己写代码实现了一遍,包括稍微复杂一点的例子. 认真读完了<effective c++>,<effective stl>. 比较仔细的学完了<数据结构与算法分析>,并把其中的每种数据结构和算法都用c++实现了一遍.包括各种线性表,树(二叉树.AVL树.RB树的各种操作),图(BFS.DFS.prim.

2.7 源码编译安装

查看安装信息 vim INSTALL  vim README #编译安装三步曲 ./configure make make install 习题: 1. 源码编译通常有三个步骤,是哪三步? configure make make install 2. 在编译安装源码包时,如果遇到错误类似"checking for cc...no",需要如何做? yum install gcc 3. 编译安装源码时如果不确定某一步是否正确,我们可以用哪个命令来检测? echo $? 总结: 主要: 编译

一道模板元编程题源码解答(replace_type)

今天有一同学在群上聊到一个比较好玩的题目(本人看书不多,后面才知是<C++模板元编程>第二章里面的一道习题), 我也抱着试一试的态度去完成它, 这道题也体现了c++模板元编程的基础和精髓: 类型就是数据. 题目如下所述: Write a ternary metafunction replace_type<c,x,y> that takes an arbitrary compound type c as its first parameter, and replaces all oc

Unix网络编程第三版源码编译

配置: $ cd Unix-Network-Programming/ $ chmod 755 configure $ ./configure 主要的工作是检查系统是否有源码编译所依赖的各种资源(系统版本是否匹配.编译器.库文件.头文件以及结构体定义等等) checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking for

Java源码之String

本文出自:http://blog.csdn.net/dt235201314/article/details/78330377 一丶概述 还记得那会的“Hello World”,第一个程序,输出的String,下面介绍String源码,颇有计算机二级考试习题的感觉. 二丶源码及案例 1.String是final类型的 在Java中,被 final 类型修饰的类不允许被其他类继承,被final修饰的变量赋值后不允许被修改. 什么是不可变类? 所谓不可变类,就是创建该类的实例后,该实例的属性是不可改变

小说分销系统,微信小说分销,类掌中云小说系统,类818tu系统源码

[演示站参数][][][][][][][][][][][] [后 台 地 址]     http://xiaoshuo.qqsiot.cn/manager          [] [管理员账号]     admin                                                     [] [渠道商账号]     channel                                                  [] [代理商账号]     age

cocos Creator js 房卡麻将/血战/H5四川麻将源码下载搭建

房卡麻将/血战/H5四川麻将 源码 支持iOS/Android/H5 完整源码 1.基于NODEJS+MYSQL的服务器,成熟的技术方案,高效稳定,且方便Windows开发,Linux平台布署,节约服务器运转成本. 2.采用最新版本的cocos引擎,cocos creator开发,可快速的进行界面调整.且能够快速地发布iOS,Android版本. 3.如需H5版本,只需针对H5平台进行资源优化即可. 4.成熟可靠的房卡式设计,能满足大部分用户使用体验. 5.产品经过大量测试,可以运转稳定. 测试