|
12. Sieť |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Na prednáške:
TCP/IP
Na posielanie údajov použijeme dva komponenty zo záložky
Internet:
TServerSocket
TClientSocket
Socket
Klient-server - spôsob komunikácie :
Nadviazanie spojenia
1. Vytvoríme aplikáciu, ktorá sa bude správať ako server.
Program vypisuje do Mema1 správu o pripojení alebo odpojení klienta. Ďalej umožní prijímať jednoduché textové správy od klientov a posielať jednoduché textové správy napísané v komponente Edit1 všetkým klientom.
procedure
TForm1.ServerClientConnect // OnClientConnect (Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add('- Client connected - '+Socket.RemoteHost); end; procedure TForm1.ServerClientDisconnect // OnClientDisconnect (Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add('- Client disconnected - '+Socket.RemoteHost); end; procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Index: Integer; begin if Key<>13 then Exit; for Index:=0 to Server.Socket.ActiveConnections-1 do Server.Socket.Connections[Index].SendText(Edit1.Text); end; procedure TForm1.ServerClientRead // OnClientRead (Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add(Socket.RemoteHost+': '+Socket.ReceiveText); end; |
2. Vytvoríme klientskú aplikáciu:
procedure
TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key<>13 then Exit; Client.Socket.SendText(Edit1.Text); end; procedure TForm1.ClientRead (Sender: TObject; // OnRead Socket: TCustomWinSocket); begin Memo1.Lines.Add(Socket.RemoteHost+': '+Socket.ReceiveText); end; |
3. Najskôr spustíme aplikáciu servera a až potom môžeme pospúšťať aplikácie klientov.
Jednoduchá sieťová hra
Motorky - známa hra pre niekoľkých hráčov po sieti. Každý hráč ovláda svoju motorku, ktorá za sebou zanecháva stopu, do ktorej nesmú ostatní hráči naraziť. Vyhráva ten, kto dokáže jazdiť najdlhšie na svojej motorke.
Server sa bude starať o:
Hráč bude klient, ktorý:
Pomocou triedy TPlayer si bude evidovanie informácii o každom hráčovi:
type TPlayer=class private FX: Integer; // poloha a smer pohybu FY: Integer; FdX: Integer; FdY: Integer; FColor: TColor; // farba FSocket: TCustomWinSocket; // zabezpečí komunikáciu so serverom public constructor Create(Socket: TCustomWinSocket); procedure Move(dX, dY: Integer); procedure Step; property X: Integer read FX; property Y: Integer read FY; property Color: TColor read FColor; property Socket: TCustomWinSocket read FSocket; end; constructor TPlayer.Create(Socket: TCustomWinSocket); begin FX:=Form1.Image.Width div 4+Random(Form1.Image.Width div 2); FY:=Form1.Image.Height div 4+Random(Form1.Image.Height div 2); FColor:=RGB(Random(200), Random(200), Random(200)); FdX:=0; FdY:=-1; FSocket:=Socket; end; procedure TPlayer.Move(dX,dY: Integer); begin FdX:=dX; FdY:=dY; end; procedure TPlayer.Step; begin FX:=FX+FdX; FY:=FY+FdY; end; |
Aplikáciu naprogramujeme tak, aby sa vedela správať aj ako server:
type type |
© 2003 Ľubomír SALANCI