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

TcpClient 端之Receive事件,為何無法接收 TcpServer 發出之資料?

缺席
Wawa
一般會員


發表:27
回覆:55
積分:16
註冊:2002-10-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-17 18:32:05 IP:61.224.xxx.xxx 未訂閱
請教各位大大: 我用 TcpClient 與 TcpServer for d7 元件, Serevr 端可收到 Client 端送出之資料, 但為何 Client 端收到不 Server 端送出之資料呢? 請諸為高手多多指導, 謝謝!! 我寫了個簡單的測試程式,原始碼如下: [ TcpServer 端程式 ] procedure TfrmServer.FormCreate(Sender: TObject); begin TcpServer1.Active:=True; end; procedure TfrmServer.TcpServer1Accept(Sender: TObject; ClientSocket: TCustomIpClient); var s:array[0..29] of Char; begin ClientSocket.ReceiveBuf(s,30); if s='gets' then //客戶端發出申請 begin ShowMessage(s); // 處此可正常執行 // 但送 Message 回Client端有問題,Client端之 Receive 事件觸發不了 s:='to Client'; ClientSocket.SendBuf(s,30); end; end; --------------------------------------------------------------- [ TcpClient 端程式 ] procedure TfrmClient.FormCreate(Sender: TObject); begin TcpClient1.RemotePort:='1111'; end; procedure TfrmClient.FormClose(Sender: TObject; var Action: TCloseAction); begin TcpClient1.Close; end; procedure TfrmClient.TcpClient1Connect(Sender: TObject); begin Label1.caption:='成功連接到'; end; procedure TfrmClient.TcpClient1Error(Sender: TObject; SocketError: Integer); begin ShowMessage('未開機或未安裝服務程序'); end; procedure TfrmClient.TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;var DataLen: Integer); begin // Server 端送出送之資料後,為何此處一直無法被觸發 ShowMessage('Client Receive'); end; procedure TfrmClient.btnConnectClick(Sender: TObject); begin try TcpClient1.Close; TcpClient1.RemoteHost:='127.0.0.1'; TcpClient1.Open; //連接服務端 except ShowMessage('未開機或未安裝服務程序'); end; end; procedure TfrmClient.btnSendClick(Sender: TObject); var s:array[0..29] of Char; begin s:='gets'; TcpClient1.SendBuf(s,30); end;
tylin123
初階會員


發表:33
回覆:53
積分:32
註冊:2003-05-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-25 15:38:51 IP:61.218.xxx.xxx 未訂閱
確定一下你的 ServerSocket 是否設定 Port number.
Wawa
一般會員


發表:27
回覆:55
積分:16
註冊:2002-10-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-28 16:13:52 IP:61.224.xxx.xxx 未訂閱
謝謝回覆. ServerSocket 是否設定 Port number.這是最基本的. 當然有設定, 否則我也不敢貼出此問題. 後來查過了國外網站, 也有些老外提出與我一模一樣的問題.好像也沒什麼人有好的答案. 所以我想 TcpClient 與 TcpServer 這 2 元件可能不是那麼好用,或者是有問題吧!! 我已改回使用了 Delphi 5 原本提供的元件ClientSocket,ServerSocket 好用,且無任何問題. 我之所以提出 TcpClient 與 TcpServer 原是想 D7, 雖有提供但不自動安裝, 怕以後版本連提供都沒有了. 所以才想從 TcpClient 與 TcpServer 試試看!! 若在貴站無法得到解答,或許只能自己從底層來做這些元件吧!!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-03 21:17:52 IP:202.39.xxx.xxx 未訂閱
procedure TfrmServer.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
var s:array[0..29] of Char;
begin
  // ...
  // 送給 Client 端這部份改在 OnReceive 事件中來進行試試
    s:='to Client';
    ClientSocket.SendBuf(s,30);
end;
--- --<-<-<@ 發表人 - hagar 於 2003/08/03 21:20:45
Wawa
一般會員


發表:27
回覆:55
積分:16
註冊:2002-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-04 13:01:11 IP:61.224.xxx.xxx 未訂閱
謝謝!! hagar 的回覆. 您可能沒看D7 的 TCPServer 元件吧!? TCPServer 此元件根本無 OnReceive & OnConnect 此 2個 event. 況且放在 OnConnect, 以 Merssage 的 Talking 來說, 也不對, 除非 每送一次 Message 都要重新 Connect 一次. 不過 TCPClient 也的確有此問題, 因他送完一次 Message, 就需重新 Connect 一次. 我也在國外網站查過資料, 有些老外提過與我一樣的問題, 得到的答案就是不要用此 2 元件,換別家提供的元件. 如果有看到此篇文章的網友,給一良心的建議, 不需浪費時間在此 2元件上, 或許有辦法可解決, 但真的不好用, 且還有很多問題. 建議還是用 D5 原來的 TClientSocket 及 TServerSocket , 很好用, 且沒問題. 或者改用其他 third party 所提供的元件吧!!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-04 17:29:58 IP:202.39.xxx.xxx 未訂閱
sorry! 小弟是直接看 D7 help 內的, 所以錯了! --- --<-<-<@
系統時間:2024-05-15 4:06:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!