Sources winsock que je comprend pas

cs_cyber37 Messages postés 110 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 19 novembre 2010 - 2 sept. 2007 à 19:58
 Utilisateur anonyme - 3 sept. 2007 à 15:16
bonjours a tous n'arrivant pas a faire fonctionner le composants Tudpsocket j'ai chercher sur le net une demo ou quelque chose mais je n'est rien trouver puis a un moment je suis tomber sur un forum ou les gens ecrivent comme sa :

"?????? ?????? ?? ????????!

????????? ? ??????? Ethereal'?!

??? ??? ????? - ?????????? ????? ?? UDP - ??? ?????????, ?? ??? ??
?????? ??????? ICMP-????????? - port unreachble (???? ??????????)!

?????? ??????

???? ????? ?? ? ??? ??????? ? ??????? ?????? ???????????? 3000-? ????..."

on y comprend rien quoi et un mec a poster une source qui ete lisible je l'es compiler pour tester mais meme apres reflexion je ne comprend pas le but de la source es ce que j'ai le droit de poster la source ici ? pour voir si vous vous comprennez se qui se passe

(je comprend pas pourquoi il faut apuiller sur le bouton 1 a chaque fois avant d'apuiller sur le bouton 2 pour envoiller le message)

je peut poster la source ?

5 réponses

Utilisateur anonyme
2 sept. 2007 à 20:02
Mdr tu viens de me tuer la .  En fait c'est un source codé pour que tu n'y comprennes rien
0
cs_cyber37 Messages postés 110 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 19 novembre 2010
2 sept. 2007 à 20:07
bas je te met la source :
____________________________________________________________
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Winsock, Sockets;
const
//  HST_BROADCAST: String = '255.255.255.255';
  MAX_UDP_SIZE: Integer = 8192;
  WM_ASYNC = WM_USER + 1;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Edit5: TEdit;
    Button2: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
      FHandle: HWND;
      procedure SockWND(var AMsg: TMessage); message WM_ASYNC;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SockWND(var AMsg: TMessage);
var
  Buffer: array [0..8191] of Char;
  Size: Integer;
  SockAddr: TSockAddrIn;
begin
  with AMsg do
    case Msg of
    WM_ASYNC:
    begin
      case WSAGetSelectEvent(LParam) of
        FD_READ:
        begin
          FillChar(Buffer, 8192, #0);
          Size := SizeOf(SockAddr);
          recvfrom(WParam, Buffer[0], MAX_UDP_SIZE, 0, SockAddr, Size);

          memo1.Lines.Add(StrPas(@Buffer));
          DeallocateHWnd(FHandle);
          closesocket(WParam);
          WSACleanup;
        end;
      end;
    end
    else
      DefWindowProc(FHandle, Msg, WParam, LParam);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  FWSAData: TWSAData;
  FSockAddr: TSockAddrIn;
  FSocket: HWND;
  Option: Boolean;
  Data: String;
  SrvHost: String;
begin
  WSAStartup($0101, FWSAData);
  FSocket := socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  with FSockAddr do
  begin
    SrvHost := Edit1.Text;
    sin_addr.S_addr := inet_addr(PChar(SrvHost));
  //  sin_addr.S_addr := INADDR_BROADCAST;
    Option := True;
    SetSockOpt(FSocket, SOL_SOCKET, SO_BROADCAST, PChar(@Option), SizeOf(Option));
    sin_port := htons(6767);
    sin_family := AF_INET;
  end;
  Data := edit5.Text; // message qui sera envoiller
  SendTo(FSocket, Data[1], Length(Data), 0, FSockAddr, SizeOf(FSockAddr));
  closesocket(FSocket);
  WSACleanup;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  FWSAData: TWSAData;
  FSockAddr: TSockAddrIn;
  FSocket: HWND;
  Option: Boolean;
  SrvHost: String;
begin
  WSAStartup($0101, FWSAData);
  FSocket := socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  with FSockAddr do
  begin
    SrvHost := Edit2.Text;
    sin_addr.S_addr := inet_addr(PChar(SrvHost));
    Option := True;
    SetSockOpt(FSocket, SOL_SOCKET, SO_BROADCAST, PChar(@Option), SizeOf(Option));
    sin_port := htons(6767);
    sin_family := AF_INET;
  end;
  bind(FSocket, FSockAddr, SizeOf(FSockAddr));
  FHandle := AllocateHWnd(SockWND);
  WSAAsyncSelect(FSocket, FHandle, WM_ASYNC, FD_READ);
end;

end.

________________________________________________________
0
Utilisateur anonyme
2 sept. 2007 à 20:17
Salut,

Je ne vois pas l'interet pour toi d'utiliser winsock directement alors que les composants Indy permettent de faire de l'UDP et il y a des souces de démonstrations fournies avec.

Ensuite pourquoi veux tu faire de l'UDP ? Est tu sur que tu as besoin d'un protocole dont les données risquent de ne pas arrivées intégralement et dans un sens aléatoire (Ps : Pour le transfert du son et des vidéo styles MSN, on n'utilise pas l'UDP comme tu le pensais)
0
cs_cyber37 Messages postés 110 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 19 novembre 2010
3 sept. 2007 à 14:58
en faite a la base c'etait pour finir un admin mod (d'un jeux qui actuelement se gere par une page web bas moi je le fait en version programe mais en faite c'est du TCP (les mec se sonts tromper sur le forum ou j'ai demander) bref donc sujet clos :-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
3 sept. 2007 à 15:16
On peut tres bien utiliser Winsock directement pour faire du TCP. Et les remarques pertinantes de PCPT reste toujours valable .

Pourquoi se butter à utiliser winsock comme des composants simples sont déjà à ta disposition comme Indy ? Si tu t'entetes pense à regarder la MSDN sur le sujet (Attention c'est pas facile ).

Ensuite pour administrer un site, on le fait pas via une application
0
Rejoignez-nous