全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1294
推到 Plurk!
推到 Facebook!

ServerSocket

缺席
Erin751111
一般會員


發表:3
回覆:0
積分:0
註冊:2008-09-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-09-17 11:58:45 IP:210.202.xxx.xxx 訂閱
[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]
------
聞不言之言
系統時間:2024-07-31 20:20:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!