高手来帮我看看为什么我的文件发送系统只写前1024个字符?(解决问题后另有200分相送)
server端(发送端):
typedef struct TUser{
int type; //1 聊天消息 2:屏幕截图 3:单机消息 4:远程注消 5:远程重启
// 6:远程关机 7:登录信息 8:正确登录 9:错误登录,10: 发送文件名 11:通知接收文件
int note; //1:发送文件名和文件大小 2:发送数据 //根据发送的文件大小来判断发送是否完成
char filename[40];
int totalbytes;
char buffer[1024];
}UUser;
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
UUser user;
Socket->ReceiveBuf(&user,sizeof(user));
switch(user.type){
case 11: { //当服务器接收到type=11,note=2时开始发送数据 //文件名和文件大小的数据已////经////////////// Form7里发送出去了
if(user.note==2)
{ //发送文件
int m=suiStringGrid1->Row;
AnsiString addr;
addr=suiStringGrid1->Cells[0][m];
int clientcount=ServerSocket1->Socket->ActiveConnections;
for(int i=0;i<clientcount;i++)
{
if(ServerSocket1->Socket->Connections[i]->RemoteAddress==addr)
{
filestream=new TFileStream(Form7->OpenDialog1->FileName,fmOpenRead);
int totalsize=filestream->Size;
int realsize;
do{
UUser file;
file.type=10;
file.note=2;
realsize=filestream->Read(file.buffer,1024);
ServerSocket1->Socket->Connections[i]->SendBuf(&file,sizeof(file));
Sleep(1);
totalsize-=realsize;
}while(totalsize>0);
delete filestream;
}
}
}
}
}
///////////////////////////////////////////////////////////////////
client(接收端):
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
UUser cmd;
Socket->ReceiveBuf(&cmd,sizeof(cmd));
switch(cmd.type){
case 10:{///当收到type=10,note=1时说明服务器发送过来的是文件名和文件的大小的数据包,这时创建文件,同时发送type=11,note=2通知服务器可以发送数据了
////////当收到tpye=10,note=2时说明服务器发送过来的是数据,开始接收数据
if(cmd.note==1)
{
filestream=new TFileStream(cmd.filename,fmOpenWrite|fmCreate|fmShareExclusive);
filetotalsize=cmd.totalbytes;
UUser file;
file.type=11;
file.note=2;
ClientSocket1->Socket->SendBuf(&file,sizeof(file));
}
if(cmd.note==2)
{
while(receivesize<filetotalsize)
{
filestream->Write(cmd.buffer,sizeof(cmd.buffer));
if(sizeof(cmd.buffer>0))receivesize+=sizeof(cmd.buffer);
if(receivesize>=filetotalsize)break;
Sleep(1);
}
delete filestream;
}
}
}
////////////////////////////////////////////////////
server和client用同样的结构体
现在的问题是:我发送一个一个文件,数据大小正确,我用progressbar来显示进度发现在文件结束的时候都会出现很长的警告:Access violation at address 000000 ,Read of address 00000000
而且要按回车很多次才可以消除
当我发送一个txt文件时,我打开文件发现虽然文件的大小正确了,可内容却是前1024个字符的重复复制
高手帮我解决这个问题,另有200分相送