各位前輩有沒有 TServerSocket和TClientSocket 傳輸大檔案的demo?
c++ builder的,是否可以發一份參考?
email:[email protected]
uj5u.com熱心網友回復:
按BCB6下char的例子改吧容易。uj5u.com熱心網友回復:
那個是char的,我想了解一下檔案傳輸是,如何讀,寫,或者大家經過實踐的說那一個方式比較好uj5u.com熱心網友回復:
我參考一些例子寫了一個傳遞字符的,但如果傳遞.dat這類檔案?//client
void __fastcall TClientFrm::Button2Click(TObject *Sender)
{
try
{
if (Edit1->Text=="") return;
ClientSocket1->Socket->SendText(Edit1->Text);
Memo1->Lines->Add(ClientSocket1->Socket->LocalAddress+"::"+Edit1->Text);
Edit1->Text="";
}
catch(...)
{
Memo1->Lines->Add("發送失敗!");
ClientSocket1->Close();
Button1->Enabled=true;
Button2->Enabled=false;
Button3->Enabled=false;
}
}
//server
void __fastcall MyServer::DataProcess(void) //所有資料處理
{
char GetStr;
String RevStr;
char buf[1024+1];
try{
while(ClientSocket->Connected==true)
{
memset(buf,0,sizeof(buf));
if(ReceiveStr(buf,1024)>0)
{
RevStr=String(buf);
Message=RemoteHostIP+"::"+RevStr;
Synchronize((TThreadMethod)&AddMessage);
TransmitStr=RemoteHostIP+"::"+RevStr;
}
RevStr="";
//以下進行資料轉發
if (TransmitStr!="")
{
bmsg=TransmitStr;
Synchronize((TThreadMethod)&BC);
TransmitStr="";
}
}
}
catch(...)
{
return;
}
}
//---------------------------------------------------------------------------
int __fastcall MyServer::ReceiveStr(char * _Buf,int length) //接收資料
{
if(length<=0) return 0;
int aLen=0;
int pos=0;
char aBuf[255];
int smalllen=0;
if(length<=smalllen)
smalllen=length;
else
smalllen=SMALLLEN;
TWinSocketStream *pStream;
DWORD beginTick;
beginTick=GetTickCount();
while(!ClientSocket->Connected && GetTickCount()-beginTick<200);
try{
pStream = new TWinSocketStream(ClientSocket, 1000);
try{
if (pStream->WaitForData(TimeOutMSec)){
while(pStream->WaitForData(100))
{
Application->ProcessMessages();
if((aLen=pStream->Read(aBuf,smalllen)) == 0)
{
ClientSocket->Close();
break;
}
else{
aBuf[aLen]=0;
memcpy(_Buf+pos,aBuf,aLen);
pos+=aLen;
if(pos>=length)
break;
if(length-pos<smalllen) //promise get right byte no more no less
smalllen=length-pos;
}
}
}
else ClientSocket->Close();
}
__finally{
delete pStream;
}
}
catch(Exception &E){
Application->HandleException(this);
}
return pos;
}
uj5u.com熱心網友回復:
源客戶端把大檔案分成若干個大小 再通過服務器轉發給 目標客戶端. 知道轉發完畢為止.uj5u.com熱心網友回復:
TServerSocket和TClientSocket 很不好用的倆控制元件,建議SocketAPI轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/154236.html
標籤:網絡及通訊開發
上一篇:dllmain何時被呼叫
