这段时间一直在研究socket发送原理,好不容易写出来一段接收发送的类,汗~~~,测试的时间发现主机发送文件给客户机时,客户机收到的文件名为空啊(只是弹出一个空白的对话框),没有弹出错误提示,请大家帮忙看看,是哪个地方出错了呢?不知道我有没有说的很明白。。
菜鸟高分跪求了,再不解决就要挂挂了。。client:struct fileData
{
public:
char filename[20];
char ffData[32*1024];
char len[50];
} fileClass;void CSocketClientDlg::OnRev()
{
memset(fileClass.ffData,0,32*1024);
memset(fileClass.filename,0,20);
memset(fileClass.len,0,50);char ch[100];sock.Receive((char FAR*)&fileClass,sizeof(fileClass),0);
if(fileClass.filename!=NULL)
{AfxMessageBox(fileClass.len);
}else
{AfxMessageBox("error");}server:void CSocketServerDlg::OnSend()
{
// TODO: Add your control notification handler code here
/*CString cstr="this is a test"; sock2.Send(cstr,cstr.GetLength());*/
CString cstr="d:\\1.exe";
CFile cfile;
int fileLength; //文件长度
int finllyLength=0; //已发送的文件长度
// WSAGetLastError sockSenderror ; //发送错误类
int i=0;
int count=0;
char buff[100]={0};
FILE *file;
char *ch="d:\\c#listview重绘.rar";
file=fopen(ch,"r+");
if(file==NULL)
{AfxMessageBox("打开文件失败");}
while(!feof(file))
{
count=fread(buff,sizeof(char),1,file); //每次读取 一个字节
fileLength++; //文件的长度
if(fileLength>32*1024)
{
AfxMessageBox("文件长度过长");
fclose(file);
break;
}
memcpy(&fileClass.ffData[i],buff,count);
i+=count;
} fileClass.ffData[i]='\0';
fclose(file);
strcpy(fileClass.filename,ch);
char *schar="hehe"; //测试用哦 strcpy(fileClass.len,schar);*/ int sendlength;
sendlength=sock2.Send(&fileClass,sizeof(fileClass),0);
// sendlength=send(sock2,(char *)&fileClass.ffData,sizeof(fileClass),0);
if(sendlength<=0)
{
AfxMessageBox("文件发送失败");
return;
}
菜鸟高分跪求了,再不解决就要挂挂了。。client:struct fileData
{
public:
char filename[20];
char ffData[32*1024];
char len[50];
} fileClass;void CSocketClientDlg::OnRev()
{
memset(fileClass.ffData,0,32*1024);
memset(fileClass.filename,0,20);
memset(fileClass.len,0,50);char ch[100];sock.Receive((char FAR*)&fileClass,sizeof(fileClass),0);
if(fileClass.filename!=NULL)
{AfxMessageBox(fileClass.len);
}else
{AfxMessageBox("error");}server:void CSocketServerDlg::OnSend()
{
// TODO: Add your control notification handler code here
/*CString cstr="this is a test"; sock2.Send(cstr,cstr.GetLength());*/
CString cstr="d:\\1.exe";
CFile cfile;
int fileLength; //文件长度
int finllyLength=0; //已发送的文件长度
// WSAGetLastError sockSenderror ; //发送错误类
int i=0;
int count=0;
char buff[100]={0};
FILE *file;
char *ch="d:\\c#listview重绘.rar";
file=fopen(ch,"r+");
if(file==NULL)
{AfxMessageBox("打开文件失败");}
while(!feof(file))
{
count=fread(buff,sizeof(char),1,file); //每次读取 一个字节
fileLength++; //文件的长度
if(fileLength>32*1024)
{
AfxMessageBox("文件长度过长");
fclose(file);
break;
}
memcpy(&fileClass.ffData[i],buff,count);
i+=count;
} fileClass.ffData[i]='\0';
fclose(file);
strcpy(fileClass.filename,ch);
char *schar="hehe"; //测试用哦 strcpy(fileClass.len,schar);*/ int sendlength;
sendlength=sock2.Send(&fileClass,sizeof(fileClass),0);
// sendlength=send(sock2,(char *)&fileClass.ffData,sizeof(fileClass),0);
if(sendlength<=0)
{
AfxMessageBox("文件发送失败");
return;
}
你好像不是弹出文件名称信息啊。
够晕的,干嘛每次读一个字节????不得累死啊?
这个语句的返回值是多少?
应该是memcpy(pBuf+nPos,ch,nSize-nPos-nCount);
笔误了。
sendlength的值是32838,接收的数据是分两次接收的,具体是多少记不清了。呵呵