joe-weiders 于 2006-10-30 10:48:28发表:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char *argv[])
{
int listenfd,communfd;
struct sockaddr_in servaddr;
pid_t childpid;
time_t tick;
char buf[1024];
if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("Could not create socket");
exit(1);
}
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=INADDR_ANY;
servaddr.sin_port=htons(13);
if(bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr))==-1)
{
perror("bind error");
exit(1);
}
if(listen(listenfd,254)==-1)
{
perror("listen error");
exit(1);
}
while(communfd=accept(listenfd,(struct sockaddr*)NULL,NULL))
{
if((childpid=fork())==-1)
{
perror("fork error");
exit(1);
}
else if(childpid==0)
{
tick=time(NULL);
snprintf(buf,sizeof(buf),"%.24s
",ctime(&tick));
write(communfd,buf,strlen(buf));
close(communfd);
}
else if(childpid>0)
close(communfd);
}
exit(0);
}
/*timeclient.h*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char *argv[])
{
int communfd,n;
struct sockaddr_in servaddr;
char recieve[1024],buf[1024];
if(argc!=2)
{
perror("Usage: client ");
exit(1);
}
if((communfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket error");
exit(1);
}
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(13);
if((servaddr.sin_addr.s_addr=inet_addr(argv[1]))==INADDR_NONE)
{
perror("inet_addr error");
exit(1);
}
if(connect(communfd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1)
{
perror("connect error");
exit(1);
}
while((n=read(communfd,recieve,1024))>0)
{
recieve[n]=0;
if(fputs(recieve,stdout)==EOF)
perror("fputs error");
}
close(communfd);
exit(0);
}
用gcc编译两个源程序分别取名为server和client,以根用户身份运行服务器程序(设服务器网络地址为192.168.0.1):
server &
然后运行客户机程序(设服务器网络地址为192.168.0.1):
client 192.168.0.1
在客户机上就会反映出服务器上当前的时间如(Tue Feb 29 21:46:19 2000)。
以上程序代码在redhat 6.0上试验通过。在程序代码中有关库函数snprintf、fputs、read、write、close的用法就不在这里说明了。最后祝愿我们每个人都能编写出自己的网络程序。