⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net.c

📁 一款基于GTK的internet phone 程序。程序分为服务器端和客户端两部分。服务器端维护用户的IP
💻 C
字号:
#include "phone.h"long timebase;long lastcheck;void inittime(void){struct timeval now;	gettimeofday(&now,0);	timebase=now.tv_sec*1000+now.tv_usec/1000;	lastcheck=0;}// returns # of milliseconds since program startedunsigned long gtime2(void){struct timeval now;unsigned long t;	gettimeofday(&now,0);	t=now.tv_sec*1000+now.tv_usec/1000-timebase;	if(t<lastcheck)	{		timebase-=1000*60*60*24;		t+=1000*60*60*24;	}	lastcheck=t;	return t;}int getmyip(unsigned char *dest){char name[256];int res;struct hostent *h;unsigned char **p;int i;	res=gethostname(name,sizeof(name));	if(res)		return -1;	h=gethostbyname(name);	p=(unsigned char **)h->h_addr_list;	if(!p[0]) return -2;	for(i=0;i<h->h_length;++i)		dest[i]=p[0][i];	return h->h_length;}unsigned long gtime(void){	return gtime2()/1000;}#define MAXMSG 4096int udpsocket;struct sockaddr_in myname={0},servername={0},buddy={0};int senderlength;struct sockaddr_in sender={0};unsigned char mesg[MAXMSG]="";void getsocket(int port){int status;int val;	udpsocket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);	if(udpsocket==-1)	{		perror("socket()");		exit(1);	}	memset(&myname,0,sizeof(myname));	myname.sin_family=AF_INET;	myname.sin_addr.s_addr=htonl(INADDR_ANY);	myname.sin_port=htons(port);	status=bind(udpsocket,(struct sockaddr *) &myname,sizeof(myname));	if(status==-1)	{		perror("bind()");		exit(1);	}	val=sizeof(myname);	status=getsockname(udpsocket,(struct sockaddr *)&myname,&val);}int putmsg(struct sockaddr_in *toname,unsigned char *msg,int len){int status;	status=sendto(udpsocket,msg,len,0,		(struct sockaddr *)toname,sizeof(struct sockaddr_in));	return status;}int getmsg(int msec){int size;		memset(&sender,0,sizeof(sender));		senderlength=sizeof(sender);		if(msec)		{			struct timeval timeout;			fd_set readfds;			int res;			memset(&timeout,0,sizeof(timeout));			timeout.tv_sec=msec/1000;			timeout.tv_usec=(msec%1000)*1000;			FD_ZERO(&readfds);			FD_SET(udpsocket,&readfds);			res=select(udpsocket+1,&readfds,0,0,&timeout);			if(res<=0) return -1;		}		size=recvfrom(udpsocket,mesg,MAXMSG,0,			(struct sockaddr *)&sender,&senderlength);		return size;}void nomem(int code){	printf("No memory! code %d\n",code);	exit(20);}void encryptblock(uchar *data,int size,uchar *key){int i;	i=0;	while(i<size)	{		encrypt1(data+i,data+i,key);		i+=8;	}}void printhash(uchar *h){int i;	for(i=0;i<8;++i)		printf(" %02x",h[i]);	printf("\n");}unsigned char specialkey[]="noda";unsigned char hashkey[8]={0xc0,0x1f,0xde,0xfd,0x3d,0x8f,0x89,0xb9};void computehash(unsigned char *dest,unsigned char *name){int i;unsigned char temp[8];char namecopy[MAXNAMESIZE+1];	memset(dest,0,8);	memset(namecopy,0,sizeof(namecopy));	strncpy(namecopy,name,MAXNAMESIZE);	for(i=0;i<MAXNAMESIZE;i+=8)	{		encrypt1(temp,namecopy+i,hashkey);		dest[0]^=temp[0];		dest[1]^=temp[1];		dest[2]^=temp[2];		dest[3]^=temp[3];		dest[4]^=temp[4];		dest[5]^=temp[5];		dest[6]^=temp[6];		dest[7]^=temp[7];	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -