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.