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