client.c
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/time.h>
#include <stdio.h>
static int s;
void initclient(char *ip)
{
long port=8000;
s=socket(PF_INET,SOCK_STREAM,0);
struct sockaddr_in sa;
sa.sin_family=AF_INET;
sa.sin_addr.s_addr=inet_addr(ip);
sa.sin_port=htons(port);
connect(s,(struct sockaddr *)&sa,sizeof(sa));
}
void gettime(struct timeval *ptp)
{
send(s,"a",2,0);
recv(s,(char *)ptp,sizeof(struct timeval),0);
}
/*
int main()
{
struct timeval tpstart,tpend;
init("127.0.0.1");
int utime;
while(1)
{
gettime(&tpstart);
sleep(2);
gettime(&tpend);
utime=1000*(tpend.tv_sec-tpstart.tv_sec)+(tpend.tv_usec-tpstart.tv_usec)/1000;
printf("sleep used time: %d ms\n",utime);
}
return 0;
}
*/
server.c
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/time.h>
int gettimeofday(struct timeval *tv,struct timezone *tz);
int main()
{
struct timeval tp;
char buf[10];
int sz;
long s,fd,port=8000;
struct sockaddr_in sa;
sz=sizeof(sa);
sa.sin_family=AF_INET;
sa.sin_addr.s_addr=htonl(INADDR_ANY);
sa.sin_port=htons(port);
s=socket(PF_INET,SOCK_STREAM,0);
bind(s,(struct sockaddr*)&sa,sz);
listen(s,5);
while(1)
{
fd=accept(s,(struct sockaddr *)&sa,&sz);
if (!fork())
{
while(1)
{
recv(fd,(char*)buf,10,0);
gettimeofday(&tp,NULL);
send(fd,(char *)&tp,sizeof(tp),0);
}
}
else
close(fd);
}
return 0;
}
使用TCP/IP协议获取时间的原因是如果测试程序运行在VmWare下获取的时间不精确。
另外,增加glFinish函数的目的也是解决虚拟机下程序执行和glx显示之间的延时问题。
//引用请注明来自hi.baidu.com/xqs83