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

請問TServer/Client Socket元件的問題??

答題得分者是:RaynorPao
willchen
初階會員


發表:64
回覆:81
積分:29
註冊:2003-05-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-06 01:39:12 IP:203.70.xxx.xxx 未訂閱
各位高手好,有個問題想請問一下,就是小弟在實做TServerSocket與ClientSocket的時候,為何在Server端的OnClientDisconnect事件下 Server端卻沒有動作產生 我在client端下了ClientSocket1->Close(),不是表示Client端已經斷線了嗎?? 那為何事件沒有觸發??這是BCB的bug嗎??還是Client端斷線寫法錯誤?? 請各位高手指教 發表人 - Gemi0305 於 2003/11/06 23:47:16
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-06 08:34:31 IP:203.73.xxx.xxx 未訂閱
引言: 各位高手好,有個問題想請問一下,就是小弟在實做TServerSocket與ClientSocket的時候,為何在Server端的OnClientDisconnect事件下 Server端卻沒有動作產生 我在client端下了ClientSocket1->Close(),不是表示Client端已經斷線了嗎?? 那為何事件沒有觸發??這是BCB的bug嗎??還是Client端斷線寫法錯誤?? 請各位高手指教
willchen 你好:
(1)請問你是怎麼寫的呢?? 是否確定程式碼有執行到該行??
( >
// >Address="192.168.1.1">Port=4000;
   ClientSocket1->Open();
}
__fastcall TForm1::~TForm1()
{
   ClientSocket1->Close();
}
// Server
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
   ServerSocket1->Port=4000;   
   ServerSocket1->Open();
}
__fastcall TForm1::~TForm1()
{
   ServerSocket1->Close();
}
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
   AnsiString szRemoteIP=Socket->RemoteAddress;
   AnsiString szRemoteHost=Socket->RemoteHost;
   AnsiString szSocketHandle=IntToStr(Socket->SocketHandle);
   AnsiString szClientList=szRemoteIP "," szRemoteHost "," szSocketHandle;
   ShowMessage(szClientList " connect");
}
void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
   AnsiString szRemoteIP=Socket->RemoteAddress;
   AnsiString szRemoteHost=Socket->RemoteHost;
   AnsiString szSocketHandle=IntToStr(Socket->SocketHandle);
   AnsiString szClientList=szRemoteIP "," szRemoteHost "," szSocketHandle;
   ShowMessage(szClientList " disconnect");
}
-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
willchen
初階會員


發表:64
回覆:81
積分:29
註冊:2003-05-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-06 16:01:41 IP:163.28.xxx.xxx 未訂閱
喔..忘記告訴包子哥一點的是,就是連線之後我有使用OnClientRead的事件,有傳Stream的資料,那為何會在OnClientDisconnected會沒有動作?? 我把OnClientRead的資料Post再板上好了     
 void __fastcall TForm1::DS2MMServerClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
 TMemoryStream *receivestream=new TMemoryStream();     ::Sleep(3);
 int receivebuf_len=Socket->ReceiveLength();
 char *receivebuf=new char[receivebuf_len];
 memset(receivebuf,0,receivebuf_len);
 Socket->ReceiveBuf(receivebuf,receivebuf_len);
 ::Sleep(3);
 receivestream->Write(receivebuf,receivebuf_len);
 receivestream->SaveToFile(CurrentDir "temp\\MACE140116039126.tmp");
 ::Sleep(3);
 MM_Triple_DES->DecryptFileA(CurrentDir "temp\\MACE140116039126.tmp",CurrentDir "temp\\MACE140116036126.agn");
 ::Sleep(3);
 DeleteFile(CurrentDir "temp\\MACE140116039126.tmp");     receivestream->Clear();          //clear     //讀檔
 receivestream->LoadFromFile(CurrentDir "temp\\MACE140116036126.agn");
 int buf_len=(int)receivestream->Size;
 char *buf=new char[buf_len 1];
 memset(buf,0,buf_len 1);
 receivestream->ReadBuffer(buf,buf_len);
 AnsiString fullagent=buf;
 Memo1->Text=fullagent;           //fullagent為行動代理者完整內容     //Parser Agent開始
  int left,right;      //index      //AgentID
  left=fullagent.Pos("") 4;
  right=fullagent.Pos("");
  AgentID=fullagent.SubString(left,right-left);      //PS,CS
   //CS
   left=fullagent.Pos("") 4;
   right=fullagent.Pos("");
   CS=fullagent.SubString(left,right-left);       //PS
   left=fullagent.Pos("") 4;
   right=fullagent.Pos("
");
   PS=fullagent.SubString(left,right-left);      //CS_Item
  left=fullagent.Pos("") 6 CS.Length();
  right=fullagent.Pos("");
  CS_Item=fullagent.SubString(left,right-left);        //CS_IP
    left=CS_Item.Pos("") 4;
    right=CS_Item.Pos("");
    CS_IP=CS_Item.SubString(left,right-left);        //CS_Servicename
    left=CS_Item.Pos("") 13;
    right=CS_Item.Pos("");
    CS_Servicename=CS_Item.SubString(left,right-left);        //CS_Argument
    left=CS_Item.Pos("") 10;
    right=CS_Item.Pos("");
    CS_Argument=CS_Item.SubString(left,right-left);      if(StrToInt(PS)!=0)
  {
   //PS_Item
  left=fullagent.Pos("") 6 PS.Length();
  right=fullagent.Pos("");
  PS_Item=fullagent.SubString(left,right-left);        //PS_IP
    left=PS_Item.Pos("") 4;
    right=PS_Item.Pos("");
    PS_IP=PS_Item.SubString(left,right-left);        //PS_Servicename
    left=PS_Item.Pos("") 13;
    right=PS_Item.Pos("");
    PS_Servicename=PS_Item.SubString(left,right-left);        //PS_Argument
    left=PS_Item.Pos("") 10;
    right=PS_Item.Pos("");
    PS_Argument=PS_Item.SubString(left,right-left);
  }     //呼叫Serverlet起來執行
 //Set Serverletpath
 //AnsiString Serverletpath=ServerletDir CS_Servicename;
 //ShellExecute(Application->Handle,NULL,Serverletpath.c_str(),NULL,NULL,SW_SHOW);     //free memory
 delete [] buf;
 delete [] receivebuf;
 delete receivestream;
}
小弟我有做過測試,寫一個簡單的例子來做測試,是沒問題的,但為何這裡就會出問題,我也找不到why,只能把所有的動作寫在OnClientRead的事件下,請問這是什麼問題??
系統時間:2024-05-05 16:08:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!