Winsock, puste pakiety

0

Witam, jak zwykle mam jakiś problem, więc przychodzę do was, gdy chcę odczytać buffer przychodzący do servera to jest on pusty za każdym razem, ale nie wiem dlaczego. Oto kod, może znajdziecie coś co rozkmini ten błąd.

 unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,winsock, StdCtrls;
type

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    memo1: TMemo;
    Button5: TButton;
    Button6: TButton;
    Memo2: TMemo;
    Button3: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TServer = record
  Errorcode : integer;
  socket_info : sockaddr_in;
  wsa : WSAData;
  Gniazdko: Integer;
  buffer : array of byte;
end;
type
  Tclient = record
  Errorcode : integer;
  sock_info : sockaddr_in;
  wsa : WSAData;
  Gniazdo: Integer;
  Buffer: array of byte;
end;


var
  Form1: TForm1;
  errorcode : integer;
  server : Tserver;
  client : Tclient;




implementation

{$R *.dfm}







procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
WSACleanUp;
end;

procedure TForm1.Button2Click(Sender: TObject);
Begin
  server.Gniazdko := Socket(AF_INET, SOCK_STREAM,0);
    if (server.Gniazdko = INVALID_SOCKET) then
      MessageBox(0,'Nie można otworzyć gniazda !','Winsock',MB_OK) else
      memo1.Lines.add('Otwarcie');

        server.socket_info.sin_family := AF_INET;
        server.socket_info.sin_addr.s_addr := INADDR_ANY;
        server.socket_info.sin_port := htons(15779);

        server.ErrorCode := bind(server.Gniazdko, server.socket_info, SizeOf(server.socket_info));
        if server.ErrorCode = SOCKET_ERROR
        then MessageBox(0,'Nie można przypisać właściwosci do gniazda!','Error',MB_OK) else
        memo1.Lines.Add('Przypisano właściwosci')    ;

         server.ErrorCode := listen(server.Gniazdko, SOMAXCONN);
         if (server.ErrorCode = SOCKET_ERROR) then MessageBox(0,'Nie można przejść w tryb nasłuchiwania','Error',MB_OK)else
         memo1.Lines.add('Nasluchuje')

        
End;



procedure TForm1.FormShow(Sender: TObject);
 begin
      server.ErrorCode := WSAStartup(MAKEWORD(2,0),server.wsa);
        if (server.ErrorCode = SOCKET_ERROR) then
           MessageBox(0,'Nie możana wystartować gniazdek !','Winsock',MB_OK)
           else  memo1.Lines.Add('Start')

end;


procedure TForm1.Button3Click(Sender: TObject);
                 Begin
    client.ErrorCode :=connect(client.Gniazdo,client.sock_info,SizeOf(client.sock_info));
      if (client.ErrorCode = SOCKET_ERROR) then MessageBox(0,'Połączenie nie udane','Error',MB_OK)else
      memo1.lines.add('Polaczenie udane')
                End;

procedure TForm1.Button1Click(Sender: TObject);
Var
  Adr: String ;

        Begin
            adr := '127.0.0.1';
            client.Gniazdo := Socket(AF_INET, SOCK_STREAM,0);
            client.sock_info.sin_family := AF_INET;
            client.sock_info.sin_addr.s_addr := inet_addr(PChar(Adr));
            client.sock_info.sin_port := htons(15779);



end;

procedure TForm1.Button5Click(Sender: TObject);
  begin
  setlength(client.buffer,20);
client.buffer[0] := $aa;
client.buffer[1] := $22;
client.buffer[2] := $27;
    send(client.Gniazdo, client.Buffer, sizeof(client.Buffer), 0);
  end;


procedure TForm1.Button6Click(Sender: TObject);
var
i : integer;
str : string;
begin
memo2.text := '';
setlength(server.buffer,20);
recv(server.Gniazdko, server.Buffer, sizeof(server.Buffer), 0);
for i := 0 to sizeof(server.buffer)   do
str  :=str + inttostr((server.buffer[i]))  ;
memo2.text:= str
end;




end.
0

Tclient i Tserver to takie same klasy więc zamiast

  server : Tserver;
  client : Tclient;

daj

Server, Klient : TMojaKlasa;

A ten kod jest źle sformatowany.

0

Ja ten kod wziąłem z tej strony : http://www.unit1.pl/334,txt
Może tam jest jakiś błąd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1