извиняюсь заранее за "тупой" код... прошу профиксить: *при событии 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.
|
Это сообщение отредактировал(а) W1zArD - 18.3.2007, 09:52
|