代码如下:(级别所限,先送上100分)//文件接收函数
int IBrcvfile(int sock,char *rcvfile)
{
int r,len,last=0;
char info[2],slen[5];#ifndef MAXSTRINGLEN 
#define MAXSTRINGLEN 128
#endif
#ifndef INFO_NORMAL
#define INFO_NORMAL  "N"
#endif
#ifndef INFO_END
#define INFO_END   "E"
#endif#ifndef INFO_RESP
#define INFO_RESP   "R"
#endif
char str[MAXSTRINGLEN],cmd[128];
FILE *fp; memset(str,0,MAXSTRINGLEN); fp=fopen(rcvfile,"w+");
if(fp==NULL)
{
return -1;
}
while(1)
{ memset(str, 0, MAXSTRINGLEN);
memset(slen, 0, sizeof(slen));//IBcomlog_print(__FILE__,__LINE__,"read info"); r=read(sock,info,1);
if(r<0)
{
fclose(fp);
return -2;
} //IBcomlog_print(__FILE__,__LINE__,"read info[%s]",info); if(strncmp(info,INFO_END,1)!=0&&strncmp(info,INFO_NORMAL,1)!=0)
{
fclose(fp);
return -3;
}
if(!strncmp(info,INFO_END,1))
last=1;

r=read(sock,slen,4);//IBcomlog_print(__FILE__,__LINE__,"read slen=[%s]",slen); if(r!=4)
{
fclose(fp);
return -4;
}
len=atoi(slen); r=read(sock,str,len);
//IBcomlog_print(__FILE__,__LINE__,"read buf[%s] r=%d",str,r); if(r!=len)
{
fclose(fp);
return -5;
} //IBcomlog_print(__FILE__,__LINE__,"write resp"); r=write(sock,INFO_RESP,1);
if(r!=1)
{
fclose(fp);
return -6;
}
//IBcomlog_print(__FILE__,__LINE__,"write resp"); r=fwrite(str,len,1,fp);
if(r<0)
{
fclose(fp);
return -7;
}
if(last)
break;
}
fclose(fp);
return 0;
}//文件发送函数
int IBsndfile(int sock,char *sndfile)
{
int r,len,last=0;
char info[2],slen[5];#ifndef MAXSTRINGLEN 
#define MAXSTRINGLEN 128
#endif
#ifndef INFO_NORMAL
#define INFO_NORMAL  "N"
#endif
#ifndef INFO_END
#define INFO_END   "E"
#endif#ifndef INFO_RESP
#define INFO_RESP   "R"
#endif
char str[MAXSTRINGLEN],cmd[128];
FILE *fp; memset(str,0,MAXSTRINGLEN); fp=fopen(sndfile,"r");
if(fp==NULL)
{
return -1;
}
while(1)
{ memset(str, 0, MAXSTRINGLEN);
memset(slen, 0, sizeof(slen));//IBcomlog_print(__FILE__,__LINE__,"fread "); r=fread(str,MAXSTRINGLEN,1,fp);
if(r<0)
{
fclose(fp);
return -6;
}
len=strlen(str);
if(len<MAXSTRINGLEN||feof(fp))
last=1;
//IBcomlog_print(__FILE__,__LINE__,"write info "); if(last)
{
r=write(sock,INFO_END,1);//IBcomlog_print(__FILE__,__LINE__,"write info end"); }
else 
{
r=write(sock,INFO_NORMAL,1);//IBcomlog_print(__FILE__,__LINE__,"write info normal"); }
if(r!=1)
{
fclose(fp);
return -2;
}
sprintf(slen,"%4d",len);
r=write(sock,slen,4);//IBcomlog_print(__FILE__,__LINE__,"write slen [%s] r=%d",slen,r); if(r!=4)
{
fclose(fp);
return -4;
} //IBcomlog_print(__FILE__,__LINE__,"write buf[%s] ",str); r=write(sock,str,len);
if(len!=r)
{
fclose(fp);
return -5;
}
r=read(sock,info,1);
//IBcomlog_print(__FILE__,__LINE__,"read resp [%c] r=%d",info[0],r);
if(r!=1)
{
fclose(fp);
return -6;
}
if(strncmp(info,INFO_RESP,1))
{
fclose(fp);
return -7;
}
if(last)
break;

}
fclose(fp);
return 0;
}