Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Не работает, хоть убейся... (((


Автор: W1zArD 18.3.2007, 09:50
извиняюсь заранее за "тупой" код...
прошу профиксить:
*при событии OnClientRead создается ClientSocket который должен отправить полученные данные на указанный порт...
коннектится, но не отправляет... (ставил хук на winsock, показало что: коннект происходит, но потом сразу же закрытие)

Код

program PortMapper;

uses
  Windows, SysUtils, untThreads in 'untThreads.pas';

var
_f : TextFile;
_s : string;
p1,p2 : Word;
msg : TMsg;

function LookForPorts(_s:string):Boolean;
begin
Result:=False;
p1:=StrToInt(Copy(_s, 0, Pos(':',_s)-1));
p2:=StrToInt(Copy(_s,Pos(':',_s)+1,Length(_s)));
if (((p1 > 0) and (p1 < 65535)) and ((p2 > 0) and (p2 < 65535))) then Result:=True;
end;

begin
if not FileExists('list.txt') then Exit;
AssignFile(_f,'list.txt');
Reset(_f);
while not Eof(_f) do
begin
  Readln(_f, _s);
  if LookForPorts(_s) then TRedirect.Create(p1, p2);
end;
while GetMessage(msg, 0, 0, 0) do
begin
  DispatchMessage(msg);
  TranslateMessage(msg)
end;
end.

модуль с классом
Код

unit untThreads;

interface

uses
  Classes, SysUtils, ScktComp, Windows, WinSock;

type
  TRedirect = class(TThread)
  public
    constructor Create(_from,_to:Word);
  private
    procedure _OnClientRead(Sender:TObject; Socket:TCustomWinSocket);
    procedure _OnClientError(Sender: TObject; Socket: TCustomWinSocket;
    ErrorEvent: TErrorEvent; var ErrorCode: Integer);
  protected
    procedure Execute; override;
  end;

implementation

var
c : TClientSocket;
s : TServerSocket;

procedure TRedirect._OnClientRead(Sender: TObject; Socket: TCustomWinSocket);
{var
s : TSocket;
a : TSockAddr;
q : string;
begin
q:=Socket.ReceiveText;
s:=WinSock.socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
a.sin_family:=AF_INET;
a.sin_port:=htons(2007);
a.sin_addr.S_addr:=inet_Addr('127.0.0.1');
connect(s, a, SizeOf(a));
send(s, Pointer(q), Length(q), 0);}
begin
c.Open;
if c.Socket.Connected then c.Socket.SendText(Socket.ReceiveText);
c.Close;
end;

procedure TRedirect._OnClientError(Sender: TObject; Socket: TCustomWinSocket;
    ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode:=0;
end;

constructor TRedirect.Create(_from,_to:Word);
begin
inherited Create(False);
s:=TServerSocket.Create(nil);
with s do
begin
  Port:=_from;
  ServerType:=stNonBlocking;
  OnClientRead:=_OnClientRead;
  OnClientError:=_OnClientError;
  Open;
end;
c:=TClientSocket.Create(nil);
with c do
begin
  Address:='127.0.0.1';
  ClientType:=ctNonBlocking;
  Port:=_to;
//  Open;
end;
end;

procedure TRedirect.Execute;
begin
//
end;

end.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)