在三层架构的程序,如何避免网络不正常时出客户端出现程序没响应和弹出“Reading Error from Socket”? ( 积分: 100 )

  • 主题发起人 主题发起人 szkok
  • 开始时间 开始时间
S

szkok

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,服务器端是ADO+DataSetProvider,客户端是用SocketConnection,在实际应用中,
当网络不正常时出客户端就出现程序没响应(完全不能响应任何事件,只能在任务管理器里结束进程),或是弹出“Reading Error from Socket”,现在请教各位大侠,怎样去避免这些情况出现?
 
如题,服务器端是ADO+DataSetProvider,客户端是用SocketConnection,在实际应用中,
当网络不正常时出客户端就出现程序没响应(完全不能响应任何事件,只能在任务管理器里结束进程),或是弹出“Reading Error from Socket”,现在请教各位大侠,怎样去避免这些情况出现?
 
晕啊,难道没人遇到过这个情况吗?
 
刚碰到到过这个问题。现在解决了。
请更新最新的midas.dll和Scketsrvr.exe.
请把邮箱告诉我,我给你发过去。
 
我也要,谢谢!
michael790819@163.com
 
谢谢,我的邮箱是:szkok@126.com
 
xieyunc@163.com
 
我也要,谢谢!
xjblyb@tom.com
 
不行啊,我用了Delphi 2006里的midas.dll和Scketsrvr.exe都是一样的结果,2006里应该是最新的了吧
 
已经发了。
我这里测试三天了,服务器在远程,多个用户一起测试,没有出现问题。
 
TO gangfeng:
你发过来的东西已收到,但是结果一样。你有没有这样测试过,当你的客户端正在工作的时候,突然网络不正常了,会有什么样的结果?因为我这个客户端比较特殊,启动之后没有人工的处理它,我现在就是想避免网络不正常时出客户端出现程序没响应和弹出“Error Reading from Socket”, 在哪个事件里处理这个呢?
 
我也要,谢谢!!
Yepemig@163.com
 
我不清楚你们是怎么做的
我会将相关代码放在TRY EXCEPT END 里面
还有我用的是COM+
 
没响应 是 客户端无法访问服务器
弹出 Error Reading from Socket 是与服务器通讯过程中数据丢失
按道理用 try .. except .. end 应该能捕获到发生的异常吧?
 
两位大侠言之有理,但是,我想避免弹出“Error Reading from Socket”的提示,如果避免不了,至少也想让它变成我所需要的文字提示。
 
我也碰到这种情况,用asta构建的三层,当客户端连不上服务端时,就隐藏在进程中,不显示窗口。那位高手能解决。我另开贴给200分。
 
我也要,谢谢aqclh@126.com
 
客户端:
//---------------------------------------------------------------------------
bool __fastcall TModule::ApplyUpDate(TClientDataSet *DataSet)
{
bool Result = true;
if (0 < DataSet->ChangeCount)
if (GetConnected())
{
Result = 0 == DataSet->ApplyUpdates(-1);
TDataSource *Source = DataSet->MasterSource;
DataSet->MasterSource = NULL;
if (0 == DataSet->ChangeCount) DataSet->Refresh();
DataSet->MasterSource = Source;
}
else
{
DataSet->SaveToFile(DataSet->Name);
Result = false;
}
return Result;
}
//---------------------------------------------------------------------------
bool __fastcall TModule::GetConnected()
{
int Date;
return ReceiveDate(&amp;Date);
}
//---------------------------------------------------------------------------
bool __fastcall TModule::ReceiveDate(int *Date)
{
AnsiString Cmd = &quot;What time is it?&quot;;
if (0 < IdUDPClient1->Host.Length())
IdUDPClient1->Send(Cmd);
else
IdUDPClient1->Broadcast(Cmd, 422);
return sizeof(Date) == IdUDPClient1->ReceiveBuffer(Date,sizeof(Date),1000);
}
服务器端:
//---------------------------------------------------------------------------
void __fastcall TForm1::IdUDPServer1UDPRead(TObject *Sender,
TStream *AData, TIdSocketHandle *ABinding)
{
//AData->Read(Buf, AData->Size);
//AnsiString BStr = Buf;
TStringStream *BufStrm = new TStringStream(&quot;&quot;);
BufStrm->CopyFrom(AData, AData->Size);
AnsiString BStr = BufStrm->DataString;
delete BufStrm;
if (0 ==BStr.AnsiCompare(&quot;where is SQL Server?&quot;))
{
char *Buf = (char *)IdUDPServer1->LocalName.data();
ABinding->SendTo(ABinding->PeerIP, ABinding->PeerPort, Buf,IdUDPServer1->LocalName.Length());
// 504
Memo1->Lines->Add(&quot;Connecting from &quot;+ABinding->PeerIP+&quot;:&quot;+ABinding->PeerPort);
}
else
if (0 ==BStr.AnsiCompare(&quot;What time is it?&quot;))
{
int Date = Now();
ABinding->SendTo(ABinding->PeerIP, ABinding->PeerPort, &amp;Date, sizeof(Date));
// 504
Memo1->Lines->Add(&quot;Ask time from &quot;+ABinding->PeerIP+&quot;:&quot;+ABinding->PeerPort);
}
}
 
关注`~~!……………………
 

Similar threads

后退
顶部