Всем привет! Вобщем написал клиент и сервер, но сервер не принимает входящее соединение... при попытке получить сокет клиента (ф-я accept) сокет <> 0
Вот код сервера:
Код | unit MainUnitServer;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Winsock, ExtCtrls;
type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; WSA : TWSAData; sock1 : TSocket; sock2 : TSocket; addr : sockaddr_in; addr1 : sockaddr_in; addr1_len : u_int; buff : String; b : u_int; l : u_int;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Memo1.Clear; if WSAStartup($101, WSA) <> 0 then begin MessageBox(Form1.Handle, 'Error WSAStartup', 'Message', MB_ICONERROR); WSACleanup; Halt; end; addr.sin_family := AF_INET; addr.sin_port := htons(7500); addr.sin_addr.S_addr := INADDR_ANY; sock1 := Socket(AF_INET, SOCK_STREAM, 0); if sock1 = INVALID_SOCKET then MessageBox(Form1.Handle, 'Error Socket', 'Message', MB_ICONERROR); b := bind(sock1, addr, SizeOf(addr)); if b = SOCKET_ERROR then MessageBox(Form1.Handle, 'Error Bind', 'Message', MB_ICONERROR); l := listen(sock1, SoMaxConn); if l = SOCKET_ERROR then MessageBox(Form1.Handle, 'Error Listen', 'Message', MB_ICONERROR); Timer1.Enabled := True; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin sock2 := accept(sock1, @addr1, @addr1_len); if sock2 = 0 then begin Memo1.Lines.Add('Client Connected...'); Timer1.Enabled := False; end; end;
procedure TForm1.Button2Click(Sender: TObject); var r : u_int; begin r := recv(sock2, buff, SizeOf(buff), 0); if r <= 0 then MessageBox(Form1.Handle, 'No Messages', 'Message', MB_ICONERROR) else Memo1.Lines.Add(buff); end;
procedure TForm1.Button1Click(Sender: TObject); begin CloseSocket(sock1); CloseSocket(sock2); WSACleanup; Form1.Close; end;
end.
|
Код клиента:
Код | unit MainUnitClient;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Winsock;
type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; WSA : TWSAData; clientsocket : TSocket; addr : sockaddr_in; c : u_int; buff : String;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Memo1.Clear; if WSAStartup($101, WSA) <> 0 then begin MessageBox(Form1.Handle, 'WSAStartup error', 'Message', MB_ICONERROR); WSACleanup; Halt; end; addr.sin_family := AF_INET; addr.sin_port := htons(7500); addr.sin_addr.S_addr := inet_addr('127.0.0.1'); end;
procedure TForm1.Button1Click(Sender: TObject); begin clientsocket := Socket(AF_INET, SOCK_STREAM, 0); if clientsocket = INVALID_SOCKET then MessageBox(Form1.Handle, 'Socket error', 'Message', MB_ICONERROR); c := connect(clientsocket, addr, SizeOf(addr)); if c = SOCKET_ERROR then MessageBox(Form1.Handle, 'Connect error', 'Message', MB_ICONERROR) else MessageBox(Form1.Handle, 'Connect Done', 'Message', MB_ICONINFORMATION); end;
procedure TForm1.Button2Click(Sender: TObject); var s : u_int; begin buff := Memo1.Text; s := send(clientsocket, buff, SizeOf(buff), 0); if s <= 0 then MessageBox(Form1.Handle, 'Message Not Send', 'Message', MB_ICONERROR) else MessageBox(Form1.Handle, 'Message Send', 'Message', MB_ICONINFORMATION); end;
procedure TForm1.Button3Click(Sender: TObject); begin CloseSocket(clientsocket); WSACleanup; Form1.Close; end;
end.
|
Помогите найти ошибку .... |