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

ClientSocket的open跟connected的問題

答題得分者是:暗黑破壞神
haman
中階會員


發表:46
回覆:137
積分:56
註冊:2005-03-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-08 20:11:50 IP:211.76.xxx.xxx 未訂閱
查了一下bcb的help,發現一件事,open時並沒有完成整個連線的動作,下面是open的說明 For client sockets, Open locates and connects to a server. For server sockets, Open opens the socket connection in a listening mode, but does not complete the connection to a client socket. 而connected則是在整個連線動作完成時才會設為true,下面是說明 Read Connected before trying to use or change the socket connection. Connected indicates whether the socket connection has been established. When Connected is true, the socket is open and available for use. When Connected is false, the socket is closed and can be changed. 但若我要在某個button時建立連線並送出一筆資料時,就有問題了, 若connected不為true的話就無法傳送資料,用sleep或無窮迴圈等的話卻又都等不到,另建一個button手按或放在formcreat沒問題, 可是一放在一起就陣亡了,請問各位大大,這問題要怎麼解決呢?
Vicen
高階會員


發表:13
回覆:145
積分:151
註冊:2005-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-09 09:13:15 IP:221.226.xxx.xxx 未訂閱
做了个测试,这样可以正常送出。    放了个MEMO1用来显示信息。 SERVER和CLIENT为了省事都放在一个窗体了。下面是代码:    
procedure TForm1.Button1Click(Sender: TObject);
begin
  //启动SERVER 监听
  ServerSocket1.Port := 100;
  ServerSocket1.Active := True;
  Memo1.Lines.Add('ServerSocket -> Active');
end;    procedure TForm1.Button2Click(Sender: TObject);
begin
  //连接服务器并发送信息,你可以在发送后就断开。
  try
    ClientSocket1.Host := '127.0.0.1';
    ClientSocket1.Port := 100;
    ClientSocket1.Open;
    While Not ClientSocket1.Socket.Connected do
      Application.ProcessMessages;
    ClientSocket1.Socket.SendText('Client >> Send Test');
  except
    Memo1.Lines.Add('Open Error.');
  end;
end;    procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  //SERVER 获得信息
  Memo1.Lines.Add('Server Get : '   Socket.ReceiveText);
end;
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-09 09:44:51 IP:211.74.xxx.xxx 未訂閱
引言: 但若我要在某個button時建立連線並送出一筆資料時,就有問題了, 若connected不為true的話就無法傳送資料,用sleep或無窮迴圈等的話卻又都等不到,另建一個button手按或放在formcreat沒問題, 可是一放在一起就陣亡了,請問各位大大,這問題要怎麼解決呢?
1.你所說的這個情況,我還沒遇過。 通常在 open 之後我就開始送資料了。 2.如果會有你說的情況。 你可以考慮在 onconnect 做手腳。 讓你的動作正確。
haman
中階會員


發表:46
回覆:137
積分:56
註冊:2005-03-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-10 11:29:02 IP:211.76.xxx.xxx 未訂閱
經過追蹤,connected是在onconnect事件發生時就被設為true, 所以我把要傳送的第一筆資料放在onconnect事件裡傳送就行了^^
系統時間:2024-05-19 23:48:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!