Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Keine Verbindung mt TServerSocket (https://www.delphipraxis.net/96566-keine-verbindung-mt-tserversocket.html)

SnuffMaster23 26. Jul 2007 22:29


Keine Verbindung mt TServerSocket
 
Moin, ich hab ein Problem mit dem TServerSocket und zwar krieg ich keine Verbindung zustande. Ich hab mir schon ein paar Tuts dazu durchgelesen, vor allem das von dsdt. Ich weiß nicht was da los ist, hier mal mein Code:
Delphi-Quellcode:
program Server;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows,
  Messages,
  ScktComp;

type TServer = class
       TCPServer: TServerSocket;
     private
       procedure OnRead(Sender: TObject; Socket: TCustomWinSocket);
       procedure OnConnect(Sender: TObject; Socket: TCustomWinSocket);
     public
       constructor Create;
     end;

var
  mread: string;

procedure TServer.OnRead(Sender: TObject; Socket: TCustomWinSocket);
var Msg: string;
begin
  Msg := Socket.ReceiveText;
  Writeln('>> ' + Msg);
end;

procedure TServer.OnConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
  Writeln('moin');
  TCPServer.Socket.Accept(Socket.SocketHandle);
end;

constructor TServer.Create;
begin
  TCPServer                := TServerSocket.Create(nil);
  TCPServer.Port           := 55555;
  TCPServer.ServerType     := stThreadBlocking;
  TCPServer.OnClientRead   := OnRead;
  TCPServer.OnClientConnect := OnConnect;
  TCPServer.Active         := true;
  TCPServer.Open;
end;

begin
  with TServer.Create do
  try
    SetConsoleTitle('Pwnertool''s Server');
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
    Writeln('me is running...'#10);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
    Writeln('type `quit'' to quit - but dont tell anyone ;-)'#10);

    repeat // Application Mainloop
      Readln(mread);
    until mread = 'quit';
  finally
    Free;
  end;
end.
Eigentlich nix wildes, aber es wird nichtmal OnConnect aufgerufen. Wenn ich mit telnet drauf verbinden will maults zwar nicht dass keine Verbindung zustande kommt, aber wenn ich was schreib dann in Hintergrundfarbe und beim Server kommt nix an.

Ich hab ja das Gefühl der Server lauscht zwar auf seinem Socket, macht dann aber keinen neuen für die eigentliche Verbindung auf.
Ich bin echt mit meinem Latein am Ende, helft mir :)

SnuffMaster23 28. Jul 2007 17:55

Re: Keine Verbindung mt TServerSocket
 
*push*

Keiner ne Idee was da los is?
Wenn ich den ServerSocket im Formdesigner einbaue funktioniert er, aber ich hab hier ja kein Form :?

SnuffMaster23 1. Aug 2007 01:40

Re: Keine Verbindung mt TServerSocket
 
Hm, ich nehm jetzt den Indy Server nachdem ich endlich rausgefunden hab dass man IdGlobal und IdIOHandler einbinden muss um TBytes zu verwenden :roll:
TIdTCPServer funktioniert nämlich in der Konsole. Warums TServerSocket nicht tut weiß ich nicht, ich vermut mal es liegt an WindowMessages.

Muetze1 1. Aug 2007 07:01

Re: Keine Verbindung mt TServerSocket
 
Zitat:

Zitat von SnuffMaster23
Warums TServerSocket nicht tut weiß ich nicht, ich vermut mal es liegt an WindowMessages.

Nein, der funktioniert in der Console. Ich habe schon mehrere Konsolenanwendungen mit diesem geschrieben ohne Probleme.

SirThornberry 1. Aug 2007 07:38

Re: Keine Verbindung mt TServerSocket
 
[OT]
folgende beiden Zeilen sind gleichbedeutend. Du könntest also eine von beiden entfernen wenn du noch drauf aufbauen würdest:
Delphi-Quellcode:
TCPServer.Active := true;
TCPServer.Open;
[/OT]

SnuffMaster23 1. Aug 2007 12:40

Re: Keine Verbindung mt TServerSocket
 
Also das mit der Konsole hab ich extra ausprobiert, das "moin" von OnConnect hab ich nie zu Gesicht bekommen.

Und wenn ich mich recht entsinne hat .Active := true nichts gebracht, nur .Open. Die Zeile war noch vom rumprobieren da.

Wenn ich den ServerSocket zum laufen bringen würde wäre ich aber auch dankbar, mit dem kann ich nämlich direkt Records verschicken ohne sie vorher in TBytes zu kopieren. Außerdem arbeitet er mit Events, da kann ich das ReadLn im "Mainloop" lassen.

{ot]
Ich find das eh witzig dass der Indy-Server Integers zum senden nicht in Big Endian umwandelt, der Client empfangene aber standardmäßig wieder zurückwandeln will :D
Besonders spannend bei in Integers gecasteten Singles^^
[/ot]


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz