線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1142
推到 Plurk!
推到 Facebook!

請問TServerSocket元件有多個Client連線且同時傳送資料的問題。

缺席
nady
一般會員


發表:8
回覆:6
積分:2
註冊:2002-11-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-14 00:40:53 IP:61.229.xxx.xxx 未訂閱
各位前輩們,您好: 小弟遇到一個不解的問題 我的程式是一個TCP/IP Server的程式,元件是用TServerSocket來做的。 在我的Form上有一個TXMLDocument的元件,是用元件列拉下來的。(不是動態產生),所以只有一個。    我要實作的功能是當ClientSocket連線上來會傳送一個XML的字串。我需要用到Form上的這個元件TXMLDocument幫我Parsing這個字串。 但是我的問題來了:因為我是在ServerSocket的OnClientRead事件中用Form上的元件Parsing收到的字串,所以如果同時有很多個Client連線上來且同時傳送XML字串,那麼OnClientRead事件是會同時觸發?還是依序觸發?    如果不幸的是同時觸發(BCB的ServerSocket是用Thread寫的嗎?),那麼會不會在第一個連線的字串已經載入TXMLDocument,且正在處理時,第二個連線的字串又載入TXMLDocument中?導致處理錯誤呢?    以下是我的程式片段,還請前輩們指導。謝謝    void __fastcall TMonServer::ServerSocketClientRead(TObject *Sender,       TCustomWinSocket *Socket) {         //解析由Client送來的指令內容         AnsiString DevXmlStr;         WideString DevXmlWStr;         DevXmlStr = Socket->ReceiveText();         DevXmlWStr = DevXmlStr;    //就是在這裡會不會有可能第二個連線的字串,又載入XMLDoc元件中?         XMLDoc->LoadFromXML(DevXmlWStr);            if(XMLDoc->IsEmptyDoc())         {                 ShowMessage("Load XML Document from file failed!");                 return;         }            _di_IXMLNode m_diDEV;         _di_IXMLNode m_diDATA;            /*         DEV..........................................根目錄                                 ............第二層 ........第二層 ........第二層 ....第二層 */ for(int i=0; i<XMLDoc->ChildNodes->Count; i ) { if(XMLDoc->ChildNodes->GetNode(i)->NodeName == (WideString)"DEV") { m_diDEV = XMLDoc->ChildNodes->GetNode(i); //判定Command的種類 if(AnsiString(m_diDEV->GetAttribute("COMMAND")) == "INIT") ( ..... } if(AnsiString(m_diDEV->GetAttribute("COMMAND")) == "EVENT") { ..... } } }
系統時間:2024-05-15 23:59:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!