每個client如何接收server訊息 |
答題得分者是:暗黑破壞神
|
paste
一般會員 發表:13 回覆:19 積分:6 註冊:2005-04-27 發送簡訊給我 |
請問各位大大:
小弟找1個範例:要由server傳送到每個client,但範例內client只能傳送訊息,卻無法接收server訊息.
請問要哪裡要改? *************** server *****************
unit server1;
interface uses Classes, QControls, QStdCtrls, QExtCtrls, QButtons, QForms, Sockets; type
TForm1 = class(TForm)
memo1: TMemo;
TcpClient1: TTcpClient;
TcpServer1: TTcpServer;
Memo2: TMemo;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
edit1: TEdit;
edit2: TEdit;
edit3: TEdit;
button1: TButton;
memo3: TMemo;
button2: TButton;
Label4: TLabel;
procedure button2Click(Sender: TObject);
procedure TcpServer1Accept(sender: TObject;
ClientSocket: TCustomIpClient);
procedure button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; // you must create your own thread to synch
// writing to a gui component
TClientDataThread = class(TThread)
private
public
ListBuffer :TStringList;
TargetList :TStrings; procedure synchAddDataToControl;
constructor Create(CreateSuspended: Boolean);
procedure Execute; override;
procedure Terminate;
end; var
Form1: TForm1;
//DataThread: TClientDataThread; implementation {$R *.xfm} //------------- TClientDataThread impl -----------------------------------------
constructor TClientDataThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
FreeOnTerminate := true;
ListBuffer := TStringList.Create;
end; procedure TClientDataThread.Terminate;
begin
ListBuffer.Free;
inherited;
end; procedure TClientDataThread.Execute;
begin
Synchronize(synchAddDataToControl);
end; procedure TClientDataThread.synchAddDataToControl;
begin
TargetList.AddStrings(ListBuffer);
end;
//------------- end TClientDataThread impl ------------------------------------- procedure TForm1.button1Click(Sender: TObject);
var okk : boolean;
begin
TcpServer1.Close;
TcpServer1.LocalPort := edit3.Text;
TcpServer1.Active := True;
okk:= TcpServer1.Active;
case okk of
true: Label4.Caption:='true';
false: Label4.Caption:='false';
end;
end; procedure TForm1.button2Click(Sender: TObject);
var I: Integer;
begin
TcpClient1.RemoteHost := edit1.Text;
TcpClient1.RemotePort := edit2.Text;
try
if TcpClient1.Connect then
for I := 0 to memo3.Lines.Count - 1 do
TcpClient1.Sendln(memo3.Lines[I]);
finally
TcpClient1.Disconnect;
end;
end; procedure TForm1.TcpServer1Accept(sender: TObject;
ClientSocket: TCustomIpClient);
var s: string;
DataThread: TClientDataThread;
begin
// create thread
DataThread:= TClientDataThread.Create(true);
// set the TagetList to the gui list that you
// with to synch with.
DataThread.TargetList := memo1.lines; // Load the Threads ListBuffer
DataThread.ListBuffer.Add('*** Connection Accepted ***');
DataThread.ListBuffer.Add('Remote Host: ' ClientSocket.LookupHostName(ClientSocket.RemoteHost)
' (' ClientSocket.RemoteHost ')');
DataThread.ListBuffer.Add('===== Begin message =====');
s := ClientSocket.Receiveln;
while s <> '' do
begin
DataThread.ListBuffer.Add(s);
s := ClientSocket.Receiveln;
end;
DataThread.ListBuffer.Add('===== End of message ====='); // Call Resume which will execute and synch the
// ListBuffer with the TargetList
DataThread.Resume;
end;
end. *************** client *****************
unit client1; interface uses Classes, QControls, QStdCtrls, QExtCtrls, QButtons, QForms, Sockets; type
TForm1 = class(TForm)
Memo1: TMemo;
TcpClient1: TTcpClient;
Memo3: TMemo;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
edit1: TEdit;
edit2: TEdit;
edit3: TEdit;
Button1: TButton;
Label4: TLabel;
Edit4: TEdit;
SpeedButton1: TSpeedButton;
procedure Button2Click(Sender: TObject);
procedure TcpServer1Accept(sender: TObject;
ClientSocket: TCustomIpClient);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; // you must create your own thread to synch
// writing to a gui component
TClientDataThread = class(TThread)
private
public
ListBuffer :TStringList;
TargetList :TStrings;
procedure synchAddDataToControl;
constructor Create(CreateSuspended: Boolean);
procedure Execute; override;
procedure Terminate;
end; var
Form1: TForm1;
DataThread: TClientDataThread; implementation {$R *.xfm} //------------- TClientDataThread impl -----------------------------------------
constructor TClientDataThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
FreeOnTerminate := true;
ListBuffer := TStringList.Create;
end; procedure TClientDataThread.Terminate;
begin
ListBuffer.Free;
inherited;
end; procedure TClientDataThread.Execute;
begin
Synchronize(synchAddDataToControl);
end; procedure TClientDataThread.synchAddDataToControl;
begin
TargetList.AddStrings(ListBuffer);
end;
//------------- end TClientDataThread impl ------------------------------------- procedure TForm1.Button2Click(Sender: TObject);
var
I: Integer;
txt1:string;
begin
TcpClient1.RemoteHost := edit1.Text;
TcpClient1.RemotePort := edit2.Text;
try
txt1:=Edit4.Text;
if (TcpClient1.Connect) then
for I := 0 to Memo3.Lines.Count-1 do txt1:=Memo3.Lines[I];
txt1:=Edit4.Text ': ' txt1;
TcpClient1.Sendln(txt1);
Memo3.Lines.Clear;
finally
TcpClient1.Disconnect;
end;
end; procedure TForm1.FormCreate(Sender: TObject);
begin
TcpClient1.Disconnect;
TcpClient1.LocalPort := edit3.Text;
TcpClient1.RemoteHost := edit1.Text;
TcpClient1.RemotePort := Edit2.Text
TcpClient1.Active:=true;
end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TcpClient1.Destroying;
end; ********** end ***************
謝謝!
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
paste
一般會員 發表:13 回覆:19 積分:6 註冊:2005-04-27 發送簡訊給我 |
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
|
paste
一般會員 發表:13 回覆:19 積分:6 註冊:2005-04-27 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
mirage
初階會員 發表:40 回覆:101 積分:28 註冊:2004-01-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |