1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Socket, Winsock;
type
Tfrm_TestSocket = class(TForm)
bt_AllocSocket: TButton;
bt_ConnectTCPGoogle: TButton;
bt_Quitter: TButton;
procedure bt_AllocSocketClick(Sender: TObject);
procedure bt_ConnectTCPGoogleClick(Sender: TObject);
procedure bt_QuitterClick(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
frm_TestSocket: Tfrm_TestSocket;
so: TSocket;
implementation
{$R *.dfm}
procedure Tfrm_TestSocket.bt_AllocSocketClick(Sender: TObject);
begin
// so := socket(AF_INET, SOCK_DGRAM, IPROTO_UDP); pour un socket UDP
so := Winsock.Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // pour un socket TCP
MessageBox(0,'Allocation socket OK','Allocation socket',MB_OK);
if so = INVALID_SOCKET then
MessageBox(0,'Allocation socket impossible','Allocation socket',MB_OK);
Exit; // impossible d'allouer le socket !
end;
function INetAddr(const Host: string): Integer;
var
pHost: PChar;
HostEnt: PHostEnt;
begin
if Host = '' then // juste au cas ou ...
Result := INADDR_NONE
else
begin
pHost := PChar(Host);
Result := inet_addr(pHost); // est-ce une adresse au format x.y.z.w ?
if Result = INADDR_NONE then
begin
HostEnt := gethostbyname(pHost); // est-ce un nom d'hote ? (résolution DNS)
if HostEnt <> nil then
Result := Integer(Pointer(HostEnt^.h_addr^)^);
end;
end;
end;
procedure Tfrm_TestSocket.bt_ConnectTCPGoogleClick(Sender: TObject);
var
sa: TSockAddr;
begin
FillChar(sa, SizeOf(sa), 0);
sa.sin_family := AF_INET; // connexion IP
sa.sin_port := htons(80); // sur le port 80
sa.sin_addr.S_addr := INetAddr('www.google.fr'); // vers www.google.fr
if sa.sin_addr.S_addr = INADDR_NONE then // adresse IP non trouvée MessageBox(0,'Adresse IP non trouvée','Connexion à Google en TCP',MB_OK);
Exit;
if connect(so, sa, SizeOf(sa)) = SOCKET_ERROR then // erreur de connexion
MessageBox(0,'Erreur Connexion','Connexion Google en TCP',MB_OK);
Exit;
end;
procedure Tfrm_TestSocket.bt_QuitterClick(Sender: TObject);
begin
frm_TestSocket.Close;
end;
end. |
Partager