最近无聊,再学学unp吧。学学网络编程。下面是一个demo:

intro/daytimetcpcli.c
#include "unp.h" int
main(int argc, char **argv)
{
int sockfd, n;
char recvline[MAXLINE + ];
struct sockaddr_in servaddr; if (argc != )
err_quit("usage: a.out <IPaddress>"); if ( (sockfd = socket(AF_INET, SOCK_STREAM, )) < )
err_sys("socket error"); bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(); /* daytime server */
if (inet_pton(AF_INET, argv[], &servaddr.sin_addr) <= )
err_quit("inet_pton error for %s", argv[]); if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < )
err_sys("connect error"); while ( (n = read(sockfd, recvline, MAXLINE)) > ) {
recvline[n] = ; /* null terminate */
if (fputs(recvline, stdout) == EOF)
err_sys("fputs error");
}
if (n < )
err_sys("read error"); exit();
}
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, ); bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(); /* 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);
}
}

下面说一下怎么运行。

dzhwen@deng:~/unpv13e/intro$ gcc -w daytimetcpsrv.c ../lib/wrapsock.c ../lib/error.c ../lib/wrapunix.c -o testsrv
dzhwen@deng:~/unpv13e/intro$ gcc -w daytimetcpcli.c ../lib/error.c -o test
dzhwen@deng:~/unpv13e/intro$ ./testsrv
dzhwen@deng:~/unpv13e/intro$ ./test 127.1.1.1
Thu May ::

成功!

最新文章

  1. Apworks框架实战(六):使用基于Entity Framework的仓储基础结构
  2. android copy项目后修改项目名
  3. anyexec
  4. 做一些Spring AOP做过的事,封装 jdk动态代理成为一个黑盒子
  5. Hive UDF 实验1
  6. 在Sharepoint 2010中启用Session功能的说明文档
  7. SQLserver中idendity的妙用
  8. 软件工程随堂作业--随机产生30到四则运算(c语言)
  9. 【转】Github轻松上手2-如何使用命令行创建和管理repo
  10. Serializable 序列化为文件
  11. 《深入Java虚拟机学习笔记》- 第9章 垃圾收集
  12. android 新浪微博客户端的表情功能的实现
  13. 通过ant脚本编译打包android工程
  14. 如何使用getopt()函数解析参数
  15. js继承与闭包(笔记)
  16. HTML-CSS相关(2)
  17. 制作代码模板的 LaTex 模板
  18. php基础--来自网页转载
  19. windows和linux环境下keras的模型框架可视化
  20. python大法好——mysql防注入

热门文章

  1. [DEBUG]椭圆的中点Bresenham算法边缘绘制出现错误
  2. ubuntu server安装OVS
  3. beta版本“足够好”/测试矩阵
  4. beta 圆桌 6
  5. [转帖]Linux后端执行命令的方法
  6. bzip2 以及 tar 压缩/解压缩/.打包等工具软件
  7. poj 2406 Power Strings(kmp应用)
  8. 【设计模式】—— 状态模式State
  9. 【设计模式】—— 备忘录模式Memento
  10. pgm9