您的位置:首页 > 理论基础 > 计算机网络

简单的时间获取程序-unix网络编程

2016-12-18 11:11 423 查看
客户端程序

#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: <IPaddress>");

/*
*socket函数创建一个网际(AF_INET)字节流(SOCK_STREAM)套接字
* 它是TCP套接字的花哨名字
* 该函数返回一个小整数描述符,以后的所有函数调用(如随后的connect和read)
* 就用该描述符来标识这个套接字
*/
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
/*
* err_sys函数输出我们作为参数提供的出错消息以及所发生的系统错误的描述
* (例如出资socket函数的可能错误之一“Protocol not supported”(协议不受支持))
* 然后终止进程
*/
err_sys("socket error");
/*
* extern void bzero(void *s,int n);
* @param s 要置0的数据的起始地址
* @param n 要置0的数据字节个数
*/
bzero(&servaddr,sizeof(servaddr));
/*
* 网际套接字地址族
* 底层使用哪种通信协议来递交数据的
* AF_INET 用的是 TCP/IPv4 协议
*/
servaddr.sin_family=AF_INET;
/*
* 网际套接字地址结构中IP地址和端口号这两个成员必须使用特定格式
* 我们调用库函数 htons ("主机到网络短整数")去转换二进制端口号
* 调用库函数 inet_pton(“呈现形式到数值”)去把ASCII命令行参数(例如运行本例子所用的206.168.112.96)转换为合适的格式
*/
servaddr.sin_port=htons(1024); /*daytime server*/
/*
* inet_pton:“点分十进制”->“二进制整数”
* int inet_pton(int af,const char *src,void *dst);
* @param af 地址簇
* @param src 来源地址
* @param dst 接收转换后的数据
*/
if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0)
err_quit("inet_pton error for %s",argv[1]);
/*
*sockfd套接字与servaddr地址结构指定的服务器建立一个TCP连接
*
*/
if(connect(sockfd,(SA*) &servaddr,sizeof(servaddr))<0)
err_sys("connect error");
while((n=read(sockfd,recvline,MAXLINE))>0){
recvline
=0; /*null terminate*/
if(fputs(recvline,stdout)==EOF)
err_sys("fputs error");
}
if(n<0)
err_sys("read error");

exit(0);
}服务器程序
#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_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(1024); /*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);
}
}

相关函数注释摘自wiki
端口改1024是为了新手方便在ide中运行,因为端口号1024之前需要root权限
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息