TcpClient 端之Receive事件,為何無法接收 TcpServer 發出之資料? |
缺席
|
Wawa
一般會員 發表:27 回覆:55 積分:16 註冊:2002-10-04 發送簡訊給我 |
請教各位大大:
我用 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 發送簡訊給我 |
|
Wawa
一般會員 發表:27 回覆:55 積分:16 註冊:2002-10-04 發送簡訊給我 |
謝謝回覆. ServerSocket 是否設定 Port number.這是最基本的. 當然有設定, 否則我也不敢貼出此問題. 後來查過了國外網站, 也有些老外提出與我一模一樣的問題.好像也沒什麼人有好的答案. 所以我想 TcpClient 與 TcpServer 這 2 元件可能不是那麼好用,或者是有問題吧!! 我已改回使用了 Delphi 5 原本提供的元件ClientSocket,ServerSocket 好用,且無任何問題. 我之所以提出 TcpClient 與 TcpServer 原是想 D7, 雖有提供但不自動安裝, 怕以後版本連提供都沒有了. 所以才想從 TcpClient 與 TcpServer 試試看!! 若在貴站無法得到解答,或許只能自己從底層來做這些元件吧!!
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
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 發送簡訊給我 |
謝謝!! 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |