6 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
7 System.Classes, Vcl.Graphics,
8 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdUDPServer, IdGlobal, IdSocketHandle,
9 IdBaseComponent, IdComponent, IdUDPBase, Vcl.StdCtrls, IdContext,
10 IdCustomTCPServer, IdTCPServer, IdTCPConnection, IdTCPClient, Vcl.ExtCtrls;
13 TMode = (cmServer, cmFindingServer, cmClient);
16 IdUDPServer1: TIdUDPServer;
17 IdTCPServer1: TIdTCPServer;
18 IdTCPClient1: TIdTCPClient;
27 procedure IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
28 const AData: TIdBytes; ABinding: TIdSocketHandle);
29 procedure Button1Click(Sender: TObject);
30 procedure IdTCPServer1Execute(AContext: TIdContext);
31 procedure FormDestroy(Sender: TObject);
32 procedure Timer1Timer(Sender: TObject);
33 procedure Button2Click(Sender: TObject);
39 procedure broadcastMessage(str: string);
49 procedure TForm3.broadcastMessage(str: string);
54 with IdTCPServer1.Contexts.LockList do
55 for i := 0 to Count-1 do
58 s.Connection.IOHandler.Write(str);
60 IdTCPServer1.Contexts.UnlockList;
63 procedure TForm3.Button1Click(Sender: TObject);
65 if mode = TMode.cmClient then
66 IdTCPClient1.IOHandler.Write(Edit1.Text)
68 broadcastMessage(Edit1.Text);
69 // ListBox1.Items.Insert(0, Edit1.Text);
72 procedure TForm3.Button2Click(Sender: TObject);
74 IdUDPServer1.Broadcast('
\83T
\81[
\83o
\81[
\82 \82é
\81H', IdUDPServer1.DefaultPort);
75 mode := TMode.cmFindingServer;
78 procedure TForm3.FormDestroy(Sender: TObject);
80 IdUDPServer1.Active := false;
81 IdTCPServer1.Active := false;
84 procedure TForm3.IdTCPServer1Execute(AContext: TIdContext);
88 s := AContext.Connection.IOHandler.ReadLn(#13#10);
89 ListBox1.Items.Insert(0, s);
93 procedure TForm3.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
94 const AData: TIdBytes; ABinding: TIdSocketHandle);
100 ip := ABinding.PeerIP;
101 if s = '
\83T
\81[
\83o
\81[
\82 \82é
\81H' then
103 mode := TMode.cmServer;
104 s := '
\8e\84\82Í
\83T
\81[
\83o
\81[';
105 IdUDPServer1.Send(ip, IdUDPServer1.DefaultPort, s);
107 else if s = '
\8e\84\82Í
\83T
\81[
\83o
\81[' then
109 mode := TMode.cmClient;
110 IdTCPClient1.Host := ip;
111 IdTCPClient1.Connect;
115 procedure TForm3.Timer1Timer(Sender: TObject);
117 Timer1.Enabled := false;
118 if mode <> TMode.cmFindingServer then
120 Label1.Caption := '
\90Ú
\91±';
124 Label1.Caption := '
\90Ú
\91±
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ';
125 mode := TMode.cmServer;
126 IdTCPServer1.Active := true;