| unit chat;
|
|
| interface
|
|
| uses
|
| Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
| Dialogs, StdCtrls, ScktComp, Winsock;
|
|
| type
|
| TForm1 = class(TForm)
|
| ClientSocket1: TClientSocket;
|
| ServerSocket1: TServerSocket;
|
| Edit1: TEdit;
|
| Button1: TButton;
|
| Edit2: TEdit;
|
| Button2: TButton;
|
| Button3: TButton;
|
| Memo1: TMemo;
|
| Edit3: TEdit;
|
| Memo2: TMemo;
|
| procedure Button2Click(Sender: TObject);
|
| procedure Button3Click(Sender: TObject);
|
| procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
|
| procedure ServerSocket1ClientRead(Sender: TObject;
|
| Socket: TCustomWinSocket);
|
| procedure Button1Click(Sender: TObject);
|
| procedure FormCreate(Sender: TObject);
|
| private
|
|
|
| public
|
|
|
| end;
|
|
| var
|
| Form1: TForm1;
|
|
| implementation
|
|
| {$R *.dfm}
|
|
| function getIPs: Tstrings;
|
| type
|
| TaPInAddr = array[0..10] of PInAddr;
|
| PaPInAddr = ^TaPInAddr;
|
| var
|
| phe: PHostEnt;
|
| pptr: PaPInAddr;
|
| Buffer: array[0..63] of Char;
|
| I: Integer;
|
| GInitData: TWSAData;
|
| begin
|
| WSAStartup($101, GInitData);
|
| Result := TstringList.Create;
|
| Result.Clear;
|
| GetHostName(Buffer, SizeOf(Buffer));
|
| phe := GetHostByName(buffer);
|
| if phe = nil then Exit;
|
| pPtr := PaPInAddr(phe^.h_addr_list);
|
| I := 0;
|
| while pPtr^[I] <> nil do
|
| begin
|
| Result.Add(inet_ntoa(pptr^[I]^));
|
| Inc(I);
|
| end;
|
| WSACleanup;
|
| end;
|
|
|
|
|
|
| procedure TForm1.Button2Click(Sender: TObject);
|
| begin
|
| ClientSocket1.Address := Edit2.Text;
|
| ClientSocket1.Active := true;
|
| Form1.Caption := 'Client';
|
| end;
|
|
| procedure TForm1.Button3Click(Sender: TObject);
|
| begin
|
| Serversocket1.Active := true;
|
| Form1.Caption := 'Server';
|
| end;
|
|
| procedure TForm1.ClientSocket1Read(Sender: TObject;
|
| Socket: TCustomWinSocket);
|
| var s : String;
|
|
| begin
|
| s := Socket.ReceiveText;
|
| Memo1.Lines.add(s);
|
|
| end;
|
|
| procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
|
| Socket: TCustomWinSocket);
|
| var s : String;
|
|
| begin
|
| s := Socket.ReceiveText;
|
| Memo1.Lines.add(s);
|
|
| end;
|
|
| procedure TForm1.Button1Click(Sender: TObject);
|
| begin
|
| if (Form1.Caption = 'Client') then
|
| begin
|
|
| Clientsocket1.Socket.Sendtext(Edit3.Text + ': ' + Edit1.Text);
|
| Memo1.Lines.add(Edit3.Text + ': ' + Edit1.Text);
|
| Edit1.Text := '';
|
|
| if Edit1.Text = '' then
|
| begin
|
| Edit1.Text := '';
|
| end;
|
| end;
|
|
| if (Form1.Caption = 'Server') then
|
| begin
|
|
| ServerSocket1.Socket.Connections[0].SendText(Edit3.Text + ': ' + Edit1.Text);
|
| Memo1.Lines.add(Edit3.Text + ': ' +Edit1.Text);
|
| Edit1.Text := '';
|
| if Edit1.Text = '' then
|
| begin
|
| Edit1.Text := '';
|
| end;
|
| end;
|
| end;
|
|
| procedure TForm1.FormCreate(Sender: TObject);
|
| begin
|
| Memo2.Lines := GetIps;
|
| end;
|
|
| end. |