Delphi-PRAXiS
Seite 3 von 6     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi LAN-Anbindung (https://www.delphipraxis.net/145410-lan-anbindung.html)

Jens Hartmann 2. Jan 2010 17:58

Re: LAN-Anbindung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das funktioniert nicht,

erst dauert es ein wenig und dann kommt folgende Fehlermeldung.

Astat 2. Jan 2010 18:07

Re: LAN-Anbindung
 
Zitat:

Zitat von Jens Hartmann
Das funktioniert nicht,

erst dauert es ein wenig und dann kommt folgende Fehlermeldung.

Nö, funkt anscheinend perfekt, ist eine WSAETIMEDOUT!

Also, btnConnect + warten bis im Memo1 connected + dann schnell btn SendDrücken!

Testen!

Jens Hartmann 2. Jan 2010 18:12

Re: LAN-Anbindung
 
Eben leider nicht.

Im Memo erscheint dieses Connect gar nicht. Ich habe auch mal in dem eintrag Memo1.Text einen Breakpoint gesetzt. Die Fehlermeldung kommt leider vorher.

Astat 2. Jan 2010 18:17

Re: LAN-Anbindung
 
Zitat:

Zitat von Jens Hartmann
Eben leider nicht.

Im Memo erscheint dieses Connect gar nicht. Ich habe auch mal in dem eintrag Memo1.Text einen Breakpoint gesetzt. Die Fehlermeldung kommt leider vorher.

Port und IP überprüfen, versuchen mit Telnet eine Verbindung aufzubauen!

Jens Hartmann 2. Jan 2010 18:30

Re: LAN-Anbindung
 
Die Einstellungen stimmen.

Mit Telnet bekomme ich allerdings scheinbar eine Verbindung. Da ich Windows Vista nutze, musste ich mir allerdings folgende Telnetvariante laden.

Telenet

Astat 2. Jan 2010 19:12

Re: LAN-Anbindung
 
Zitat:

Zitat von Jens Hartmann
Die Einstellungen stimmen.

Mit Telnet bekomme ich allerdings scheinbar eine Verbindung. Da ich Windows Vista nutze, musste ich mir allerdings folgende Telnetvariante laden.

Telenet

Naja, der Telnet Client funktioniert genauso wie der Demo Client.

Hab somit keine weiteren Tips mehr, leider!

lg. Astat

Jens Hartmann 2. Jan 2010 19:13

Re: LAN-Anbindung
 
So,ich habe das ganze jetzt nochmal in Delphi neu geschrieben, und es funktioniert. Irgendwie stimmt was nicht mit dem Projekt. Seltsamerweise, würde an keiner Stelle ein Breakpoint genommen. Noch nichtmal bei einem ShowMessage im Btn.Click.

Zusätzlich habe ich jedem Ereignis der TClientSocket eine Eintrag ins TMemo verpasst und bekomme nach dem Programmstart die folgenden 4 Einträge...
Code:
OnLookup
OnConnecting
OnConnect
OnWrite
in genau dieser Reihenfolge.

Hier mal der aktuelle Code.

Delphi-Quellcode:
var
  _Buffer : array [0..16] of Byte = (
    $00, $00, $00, $0D,
    $C1, $92, $BD, $73,
    $2A, $BE, $2E, $47,
    $24, $F3, $03, $01,
    $00);

function Write(ptrData: Pointer; cbData: integer): Boolean;
var
  ret, cbRcv, cb, cbRead: integer;
  sockaddr: TSockAddr;
  WSData: TWSAData;
  szBuf: array of char;
  ClientSocket: TSocket;
begin
  result := false;
  if (ptrData = nil) or (cbData <= 0) then EXIT;
  ClientSocket := 0;
  try
    ret := WSAStartup($0020, WSData);
    if (ret <> S_OK) then EXIT;

    ClientSocket := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (ClientSocket = INVALID_SOCKET) then EXIT;

    FillChar(sockaddr, SizeOf(TSockAddr), #0);

    with sockaddr do begin
      sin_Family := AF_INET;
      sin_Port  := htons(8016);
      sin_Addr  := TInAddr(Inet_Addr(PChar('192.168.178.75')));
    end;

    ret := Connect(ClientSocket, sockaddr, SizeOf(sockaddr));
    if (Ret = Socket_Error) then EXIT;

    ret := Send(ClientSocket, ptrData^, cbData, 0);
    if (ret = SOCKET_ERROR) then EXIT;

    setlength(szBuf, 32768 * 2);

    cb := 0;
    szBuf[0] := #0;

    while true do begin
      ret := ioctlsocket(ClientSocket, FIONREAD, cbRead);
      if (ret = SOCKET_ERROR) then EXIT;
      if cbRead = 0 then break;

      cbRcv := Recv(ClientSocket, szBuf[cb], 32768, 0);
      if cbRcv = 0 then EXIT;

      if (cbRcv = WSAECONNRESET) or (cbRcv = SOCKET_ERROR) then EXIT;

      cb := cb + cbRcv;
      if cb + 32768 > Length(szBuf) then SetLength(szBuf, Length(szBuf) * 2);
    end;

    result := true;
  finally
    if ClientSocket > 0 then begin
      ShutDown(ClientSocket, SD_BOTH);
      Closesocket(ClientSocket);
    end;
    WSACleanup;
  end;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add('OnConnect');
end;

procedure TForm1.ClientSocket1Connecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add('OnConnecting');
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add('OnDisConnect');
end;

procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  Memo1.Lines.Add('OnError');
end;

procedure TForm1.ClientSocket1Lookup(Sender: TObject; Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add('OnLookup');
end;

procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add('OnRead');
end;

procedure TForm1.ClientSocket1Write(Sender: TObject; Socket: TCustomWinSocket);
begin
  ClientSocket1.Socket.SendBuf(_Buffer, Length(_Buffer));
  Memo1.Lines.Add('OnWrite');
end;

procedure TForm1.btnLogonClick(Sender: TObject);
begin
  ClientSocket1.Socket.SendBuf(_Buffer, Length(_Buffer));
end;
Ich denke das, das so ganz gut aussieht. Allerdings weis ich nicht, ob meine Hardware mich als USER akzeptiert.

[EDIT]Astat, ich habe gerade gelesen, das Du mit Lazarus arbeitest. Kann es sein, das ich dadurch den Client nicht sauber geöffnet bekommen habe.

Gruß Jens

Astat 2. Jan 2010 19:57

Re: LAN-Anbindung
 
Zitat:

Zitat von Jens Hartmann
So,ich habe das ganze jetzt nochmal in Delphi neu geschrieben, und es funktioniert.

Jup, damit kann man nun arbeiten.

Zitat:

Zitat von Jens Hartmann
..ich habe gerade gelesen, das Du mit Lazarus arbeitest. Kann es sein, das ich dadurch den Client nicht sauber geöffnet bekommen habe.

Nein, sollte die client.dof und die Client.dcu im lib Verzeichnis, dran schuld sein, einfach löschen, und projekt danach mit Delphi öffnen.

Nun, wenn das Programm jetzt eine Verbindung zum Server hat, versuch mal den nächsten Buffer mit diesen Daten zu senden.
00 00 00 0D C1 92 BD 74 2A BC 2E 47 24 F4 03 01 00

und lese die Daten die du vom Server bekommst in das Memo ein.
Es sind Binärdaten, diese eventuell in Hex umwandeln.

Wenn du den richtigen Port hast, sollten nun permanent Daten gesendet werden.

Wichtig ist, dass alles genauso abläuft, wie bei deiner Netzweraufzeichnung.
D.h. User + Passwort + Port, also alles mit identischen Parametern.
Denn in den 13 Byte Daten sind user und Pwrd drinnen, eventuell noch ein Identifier mit 1 Byte.
Da du die Daten für das Logon kennst, User + Pwrd, kannst Du nun Rückschlüsse auf die 13 Byte Daten ziehen.
Dies musst Du Checken.

Zieh Dir nochmals Tread #13 rein.

Lass auch den Packetizer nebenbei laufen, dann siehst Du gleich welche Daten zurückkommen, und ob auch der richtige
Kanal der Hardware verwendet wird (Messaging Port) und nicht der Konfigurationsport.


lg. Astat

Jens Hartmann 2. Jan 2010 20:44

Re: LAN-Anbindung
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hab das jetzt gemacht und mal aufgezeichnet. Datei und Screenshot liegt im Anhang.
Es scheint aufjedenfall schon so zu sein, das meine Hardware erkennt, das da jemand was will.
Was ich jetzt nicht so ganz verstanden habe, ist das mit den Zugangsdaten.

Ich brauche ja folgende Zugangsdaten.
Code:
Passwort: 12345678
IdentNr.: 12345678
Code: 12345678
Wie kann ich die jetzt senden, und vorallem wann muss ich diese senden. Ist das ansonsten schon so wie ich mir das vorstellen muss.

Gruß Jens

Astat 2. Jan 2010 21:32

Re: LAN-Anbindung
 
Zitat:

Zitat von Jens Hartmann
Ich brauche ja folgende Zugangsdaten.
Code:
Passwort: 12345678
IdentNr.: 12345678
Code: 12345678
Wie kann ich die jetzt senden, und vorallem wann muss ich diese senden. Ist das ansonsten schon so wie ich mir das vorstellen muss.

Gruß Jens


OK, der _Buffer ist falsch, mit untenstehender Anmeldung versuchen, (Jeder 2. Hexwert lt. Thread #13 ist das was der Client sendet.)

1.
00 00 00 0D 2E 47 24 F3 2A BD C1 92 BD 74 03 01 00

2.
00 00 00 0D 2E 47 24 F4 2A BB C1 92 BD 75 03 01 00

Frage, die Zugangsdaten, sind die alle numerisch, weisst du die max länge der einzelnen Daten?
ISt wichtig, da diese ja in den 13 Byte stecken?

Astat


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 Uhr.
Seite 3 von 6     123 45     Letzte »    

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