header.h
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/time.h>
#include<time.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
#include<unistd.h>
#include<sys/socket.h>
#include<string.h>
typedef struct sockaddr SA;
void err_sys(const char* errMsg);
void err_quit(const char* errMsg);
header.c
#include"header.h"
void err_sys(const char* errMsg)
{
printf("%s \n",errMsg);
}
void err_quit(const char* errMsg)
{
err_sys(errMsg);
exit(-1);
}
daytimetcpcli.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/time.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<errno.h>
#include<signal.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<unistd.h>
#define MAXLINE 2014
typedef struct sockaddr SA;
void err_sys(const char* errMsg)
{
printf("%s \n",errMsg);
}
void err_quit(const char* errMsg)
{
err_sys(errMsg);
exit(-1);
}
int main(int argc,char ** argv)
{
int sockfd,n;
char recvline[MAXLINE+1];
struct sockaddr_in servaddr;
if( argc != 2)
{
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(8888);
char _err[100];
if( inet_pton(AF_INET,argv[1],&servaddr.sin_addr) <= 0)
{
//err_quit("inet_pton error for "+ argv[1]);
sprintf(_err,"inet_pton error for %s",argv[1]);
err_quit(_err);
}
if( connect(sockfd,(SA*)&servaddr,sizeof(servaddr))< 0 )
err_sys("connect error");
while( (n = read(sockfd,recvline,MAXLINE)) >0)
{ recvline[n] = 0;
if( fputs(recvline,stdout) == EOF)
err_sys("fputs error");
}
if( n<0 )
err_sys("read error");
exit(0);
}
daytimetcpsrv.c
#include"header.h"
#define MAXLINE 1024
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);
memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(8888);
int ret ;
if ( (ret = bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr))) < 0 )
{
printf("bind error: %s\n",strerror(errno));
}
listen(listenfd,8);
struct sockaddr_in socknameaddr ;
int socknameaddr_len=sizeof(socknameaddr);
printf("start to accept\n");
getsockname(listenfd,(struct sockaddr*)&socknameaddr,&socknameaddr_len);
printf("listen address = %s : %d \n",inet_ntoa(socknameaddr.sin_addr),ntohs(socknameaddr.sin_port));
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);
}
}