od razu Ci mowi, ze ten kod zrodlowy to łajno. zamieszczam cały, bo nie wiem, który kawalek by Ciebie interesował.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp, CoolTrayIcon, TextTrayIcon, Menus;
type
tuser=record
pass:string;
status:byte;
polaczenie:integer;
kontakty:array of integer;
end;
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
CoolTrayIcon1: TCoolTrayIcon;
Edit1: TEdit;
PopupMenu1: TPopupMenu;
killservuer1: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure CoolTrayIcon1Click(Sender: TObject);
procedure ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure killservuer1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
users: array [1..200] of tuser;
F: TextFile;
numer,i,x:integer;
wiadomosc,autor:string;
// h: thandle;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
serversocket1.Port:=strtoint(edit1.text);
Serversocket1.Active:= true;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
wiadomosc:=socket.ReceiveText;
if wiadomosc[length(wiadomosc)]='~' then
begin
numer:=strtoint(Copy(wiadomosc, Length(wiadomosc)-3,3));
setlength(wiadomosc,length(wiadomosc)-4);
users[numer].polaczenie:=ServerSocket1.Socket.ActiveConnections-1;
if users[numer].pass=wiadomosc then
begin
users[numer].status:=1;
Memo1.Lines.Add('logowanie numeru '+inttostr(numer));
memo1.Lines.Add('jego adres to ' + Socket.RemoteAddress);
memo1.Lines.Add('jego nr polaczenia to '+inttostr(users[numer].polaczenie));
coolTrayIcon1.ShowBalloonHint('wsconnect server','number '+inttostr(numer)+' logged in',bitInfo, 10);
end
else
begin
ServerSocket1.Socket.Connections[users[numer].polaczenie].SendText('podales nieprawidlowe haslo, zostaniesz odlaczony');
ServerSocket1.Socket.Connections[users[numer].polaczenie].Close;
ServerSocket1.Socket.Connections[users[numer].polaczenie].Free;
end;
end
else
begin
numer:=strtoint(Copy(wiadomosc, Length(wiadomosc)-2,3));
setlength(wiadomosc,length(wiadomosc)-3);
ServerSocket1.Socket.Connections[users[numer].polaczenie].SendText(wiadomosc);
memo1.Lines.Add('dostalem wiadomosc:'+wiadomosc+' dla nru '+inttostr(numer));
end;
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo1.Lines.Add('klient sie rozlaczyl');
end;
procedure TForm1.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo1.Lines.Add('Akceptuje połączenie z: ' + Socket.RemoteAddress);
ServerSocket1.Socket.Connections[ServerSocket1.Socket.ActiveConnections -1].SendText('~~~~');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
coolTrayIcon1.ShowBalloonHint('wsconnect servuer','by wojtek seredynski',bitInfo, 10);
x:= GetWindowLong(Application.Handle, GWL_EXSTYLE);
x:= x or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW;
SetWindowLong(Application.Handle,GWL_EXSTYLE,x);
memo1.Clear;
AssignFile(F, 'c:/wsconnect.TXT');
Reset(F); // otwarcie pliku
try
while not Eof(F) do
begin
Readln(F, numer, users[numer].pass); // wczytanie 2-óch kolumn
end;
finally
CloseFile(F);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Clear;
end;
procedure TForm1.CoolTrayIcon1Click(Sender: TObject);
begin
form1.CoolTrayIcon1.ShowMainForm;
end;
procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode:=0;
end;
procedure TForm1.killservuer1Click(Sender: TObject);
begin
form1.Close;
end;
end.