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

📄 conncli.c

📁 tuxede下面的编程
💻 C
字号:

#include <stdio.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/timeb.h>
#include <stdlib.h>
#include "atmi.h"		
#include "fml32.h"
#include "myfml.h"



FBFR32 *sendbuf=NULL;
char *rcvbuf;

char *filebuf;
FILE *fp;



log(const char *fmt, ...)
{
	va_list ap;	
	va_start(ap, fmt);
		
	vfprintf(stdout, fmt, ap);
	fflush(stdout);	
	va_end(ap);
	
	fclose(fp);
	tpfree((char *)sendbuf);
	tpfree((char *)rcvbuf);
	free(filebuf);
	tpterm();
	exit(1);
}


#if defined(__STDC__) || defined(__cplusplus)
main(int argc, char *argv[])
#else
main(argc, argv)
int argc;
char *argv[];
#endif

{

	long rcvlen=1000,filelen,i;
	long sendlen;
	int ret;
	long reallen;
	long bnum,bsize=1024;	
	struct timeb start,end;
	long timesum=0;
	FLDLEN32 len=0;
	char *size;
	long cd;
	long revent;
	long fail=0;
	
	
	
	
	/*size = (char *)getenv("BLOCK_SIZE");
	if (size == NULL)
		bsize=10;
	else
		bsize=atoi(size);
	printf("bsize=%ld\n",bsize);
	*/
	
	if(argc != 2)
	{
		(void) fprintf(stderr, "Usage: %s filename\n",argv[0]);
		exit(1);
	}
	ftime(&start);
	fp = fopen( argv[1], "rb" );
	if(fp == NULL)
	{
		printf("open file:%s failure\n",argv[1]);
		exit(1);
	}
	if(fseek(fp, 0, SEEK_END)!=0)
	{
		perror("fseek() failure:");
		exit(1);
	}
	filelen=ftell(fp);
	rewind(fp);
	sendlen=filelen + 100;//???
	if((sendbuf = (FBFR32 *)tpalloc("FML32", NULL, sendlen)) == (FBFR32 *)NULL) 
	{
		printf("Error allocating send buffer\n");
		exit(1);
	}
	len = Fsizeof32(sendbuf);
	if(Finit32(sendbuf, (FLDLEN32)len)== -1)
	{
		printf("finit32() failure\n");
		exit(1);
	}
		
	if((rcvbuf = (char *) tpalloc("STRING", NULL, rcvlen)) == NULL) 
	{
		printf("Error allocating receive buffer\n");
		exit(1);
	}
			
	
	filebuf=(char *)malloc(bsize);
	if(filebuf == NULL)
	{
		printf("malloc(filebuf) failure");
        	exit(1);		
	}	
	bnum=(filelen -1)/bsize + 1; 
	if(Fchg32( sendbuf, FNAME, 0, argv[1], (FLDLEN32)len )<0)
	{
		log("Fchg32(FNAME) failure\n",Fstrerror32(Ferror32));
	}
	if(Fchg32( sendbuf, BNUM, 0, (char *)&bnum, (FLDLEN32)len )<0)
	{
		log("Fchg32(BNUM) failure\n",Fstrerror32(Ferror32));
	}
	printf("filelen = %ld, block num = %ld\n",filelen,bnum);
	i=-1;
	if(Fchg32(sendbuf, BID, 0, (char *)&i, 0)<0)
	{
		log("Fchg32(BID) failure:%s\n",Fstrerror32(Ferror32));
	}
	printf("bid=%ld\n",i);
	if (cd = tpconnect("CONN",NULL,0,TPSENDONLY )==-1)
	{
		printf("tpconnect: %s\n",tpstrerror(tperrno));
		exit(1);
	}
	else
		printf("connect sucessful\n");
	
	if (tpsend(cd,sendbuf,0,TPRECVONLY,&revent)==-1)
	{
		printf("**tpsend():failule,revent=%ld,strerr=%s\n",revent,tpstrerror(tperrno));
		exit(1);
	}
	if (tprecv(cd,&rcvbuf,&rcvlen,0,&revent)==-1)
		printf("tprecv():,revent=%ld,strerr=%s\n",revent,tpstrerror(tperrno));
	i=atol(rcvbuf);
	printf("get id=%ld\n",i);
	if(i==bnum-1)
	{
		log("the file have been transfered\n");
		exit(1);
	}
	/*neednot to send the those record again*/
	//Finit32(sendbuf,sendlen);
	while(i<bnum)
	{
		
		while(fail)
		{
			if (cd = tpconnect("CONN",NULL,0,TPSENDONLY)==-1)
			{
				printf("re tpconnect: %s\n",tpstrerror(tperrno));
				continue;
			}
			else
			{
				printf("re connect sucessful\n");
				fail=0;
				break;
			}
		}
		if(fseek(fp, i*bsize, 0)!=0)
		{
			log("fseek failure\n");	
		}
		reallen=fread(filebuf, 1, bsize, fp);
		if(reallen!=bsize && feof(fp)==0 )
		{
			log("fread() failure\n");	
		}	
		if(Fchg32(sendbuf, BID, 0, (char *)&i, 0)<0)
		{
			log("Fchg32(BID) failure:%s\n",Fstrerror32(Ferror32));
		}
		printf("bid=%ld\n",i);
		if(Fchg32( sendbuf, FDATA, 0, filebuf, (FLDLEN32)reallen)<0)
		{
			log("Fchg32(FDATA) failure:%s\n",Fstrerror32(Ferror32));
		}
		if(i == bnum - 1)
		{
			if (tpsend(cd,sendbuf,0,TPRECVONLY,&revent)==-1)
			{
				printf("tpsend():failule,revent=%ld,strerr=%s\n",revent,tpstrerror(tperrno));
				if(revent !=TPEV_SENDONLY) fail=1;
				continue;
			}
		}
		else
		{
			if (tpsend(cd,sendbuf,0,TPNOBLOCK,&revent)==-1)
			{
				printf("tpsend():failule,revent=%ld,strerr=%s\n",revent,tpstrerror(tperrno));
				if(revent !=TPEV_SENDONLY) fail=1;
				continue;
			}	
		}
		i++;
	} 
	
	if (tprecv(cd,&sendbuf,&rcvlen,0,&revent)==-1)
		printf("!!!tprecv():failule,revent=%ld,strerr=%s\n",revent,tpstrerror(tperrno));
	else
		printf("tprecv() ok*********\n");
	
	if(tpdiscon(cd)==-1)
		printf("tpdiscon():%s\n",tpstrerror(tperrno));
	else
		printf("tpdiscon() success\n");
	
	ftime(&end);
	timesum=end.time*1000+end.millitm-start.time*1000-start.millitm;
	if (timesum!=0)		
		printf("/cost time %ld(ms), speed=%ld(ms)\n", timesum,filelen/timesum);		
	
	log("finished\n");
}


⌨️ 快捷键说明

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