Indy Server Execute 問題 |
尚未結案
|
kirkcctw
一般會員 發表:4 回覆:3 積分:1 註冊:2007-12-02 發送簡訊給我 |
請問以下 , 我用Indy寫了個TcpServer , 只要Client連入傳入任何資料 , 就回復一段文字 , 流量大的時候發現會有 pointer 錯誤跳出來 , 請問問題在哪 , source code 如下 :
[code cpp] void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread) { if (AThread->Connection->Connected()) { String aaa ; try { aaa = AThread->Connection->ReadChar(); } catch (...) { AThread->Terminate(); return; }; if (!aaa.IsEmpty()) { try { AThread->Connection->Write("<?xml version='1.0' ?>\0"); AThread->Connection->Disconnect(); } catch (...) { AThread->Terminate(); } }; } } [/code] 編輯記錄
kirkcctw 重新編輯於 2011-05-03 00:13:27, 註解 無‧
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
可能是buffer區爆了,大量的話要考慮讀取效率
另外,斷線工作盡可能交給client做,對server效能會好一點,比較不會出怪手 以下附上code [code cpp] void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread) { if (! (AThread->Terminated)) { // 設定讀取timeout時間,避免卡住 IdTCPServer1->ReadTimeout = 500; // ms AnsiString sTemp = *NullStr; int iBufSize = AThread->Connection->ReadFromStack(false, 1000, false); if (iBufSize > 0) { sTemp = AThread->Connection->ReadChar(); } if (!sTemp.IsEmpty()) { AThread->Connection->Write("<?xml version='1.0' ?>\0"); } } } [/code] ===================引 用 kirkcctw 文 章=================== 請問以下 , 我用Indy寫了個TcpServer , 只要Client連入傳入任何資料 , 就回復一段文字 , 流量大的時候發現會有 pointer 錯誤跳出來 , 請問問題在哪 , source code 如下 : [code cpp] void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread) { ??? if (AThread->Connection->Connected()) { ??? String aaa ; ??? try { ??? aaa = AThread->Connection->ReadChar(); ??? } catch (...) { ??? AThread->Terminate(); ??? return; ??? }; ??? if (!aaa.IsEmpty()) { ??? try { ??? AThread->Connection->Write("<!--l version='1.0'-->\0"); ??? AThread->Connection->Disconnect(); ??? } catch (...) { ??? AThread->Terminate(); ??? } ??? }; ??? } } [/code] |
kirkcctw
一般會員 發表:4 回覆:3 積分:1 註冊:2007-12-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |