ServerSocket |
缺席
|
Erin751111
一般會員 發表:3 回覆:0 積分:0 註冊:2008-09-17 發送簡訊給我 |
[code delphi]
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ScktComp; type TForm1 = class(TForm) ServerSocket1: TServerSocket; ListBox1: TListBox; Memo2: TMemo; Memo3: TMemo; Button1: TButton; procedure FormCreate(Sender: TObject); procedure ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure Memo3KeyPress(Sender: TObject; var Key: Char); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} // Form建立後就將ServerSocket開啟 procedure TForm1.FormCreate(Sender: TObject); begin ServerSocket1.Active:=True; // 打開通道 ListBox1.Clear; Memo2.Clear; Memo3.Clear; end; // 有Client連上主機 procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); var i,j:integer; begin i:=ListBox1.Items.IndexOf(Socket.RemoteAddress); if (i<0) then begin ListBox1.Items.Add(Socket.RemoteAddress) end; for j:=0 to ServerSocket1.Socket.ActiveConnections-1 do begin // 一個一個Client找 if not ServerSocket1.Socket.Connections[j].SocketHandle=Socket.SocketHandle then ServerSocket1.Socket.Connections[j].SendText('Client:' Socket.RemoteAddress ' 已登入'); // 將收的的訊息送給所有的Client端 end; end; // 有Client與主機斷訊 procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); var i:integer; begin i:=ListBox1.Items.IndexOf(Socket.RemoteAddress); if (i>=0) then begin ListBox1.Items.Delete(i); end; end; // 有Client送來訊息 procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var str:string; begin str:=Socket.ReceiveText; // 一定要用一個變數str先存起來,不可直接使用receivetext Memo2.Lines.Add(str); // 將收到的訊息加入memo2中 // for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do begin // 一個一個Client找 // ServerSocket1.Socket.Connections[i].SendText(str); // 將收的的訊息送給所有的Client端 end; //按下Enter procedure TForm1.Memo3KeyPress(Sender: TObject; var Key: Char); var i:integer; begin if Key = #13 then begin for i:=ListBox1.Count-1 downto 0 do //從最後一個開始數 if ListBox1.Selected[i] then if ServerSocket1.Socket.ActiveConnections>0 then begin ServerSocket1.Socket.Connections[i].SendText('Server:' Memo3.Lines.text); // 送訊息給Client Memo2.Lines.Add('Server:' Memo3.Lines.text); Memo3.clear; // 清空輸入的Memo3 Key:=#0; // 清空這個Enter按鍵 end; end; end; //按了Button1 procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin for i:=ListBox1.Count-1 downto 0 do if ListBox1.Selected[i] then if ServerSocket1.Socket.ActiveConnections>0 then begin ServerSocket1.Socket.Connections[i].SendText('Server:' Memo3.Lines.text); // 送訊息給Client Memo2.Lines.Add('Server:' Memo3.Lines.text); Memo3.clear; // 清空輸入的Memo3 end; end; end. [/code]
------
聞不言之言 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |