Autor Beitrag
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 26.03.08 21:51 
Buffer ist doch auch nur ein Bereich im Speicher. Und Speicher ist nix andres als ne riesig große Regalwand, wo man sich die Fächer so zusammenbauen kann, wie man se grad brauch ;-)

@Warum zuerst in den Speicher vor'm Senden: Müsste Narses eigentlich drin stehen haben ... Kann Dir aber mindestens 3 zusätzliche Gründe nennen:
- Geht schnell
- Datenbündelung
- Vermeidung kleiner Pakete

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
der13geist
Hält's aus hier
Beiträge: 10

Win Vista Ultimate x86
D7 Pro, D2007
BeitragVerfasst: Mi 26.03.08 22:04 
nja also der Code heisst ja eig. so

ausblenden Delphi-Quelltext
1:
2:
SetLenght(BinMessage, 4); 
PInteger(@BinMessage[1])^ := Lenght(Edit1.Text);


und (da ich es immer noch nicht verstanden habe) ich hätte anstatt so es so geschrieben

ausblenden Delphi-Quelltext
1:
BinMessage := Lenght(Edit1.Text);					


Aber dieses würde ja nicht funktionieren.
Habe es leider imer noch nicht verstanden :(

_________________
01 05 54 F4
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mi 26.03.08 23:42 
Ähm... es steht doch dran warum:

1. BinMessage ist ein String
2. Die Länge des Strings soll im Binärformat in BinMessage geschrieben werden.

ausblenden Delphi-Quelltext
1:
2:
BinMessage := Length(Edit1.Text);             // Geht nicht, weil BinMessage ein String
BinMessage := IntToStr(Length(Edit1.Text));   // Geht zwar, aber nicht im Binärformat


Und auf Seite 9 noch einmal ganz exakt beschrieben.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
der13geist
Hält's aus hier
Beiträge: 10

Win Vista Ultimate x86
D7 Pro, D2007
BeitragVerfasst: Do 27.03.08 00:05 
AHSOOO
Also ist dieser code eig. nur dazu da die länge des strings in Binär format abzuspeichern !?

_________________
01 05 54 F4
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 27.03.08 00:21 
Moin!

user profile iconder13geist hat folgendes geschrieben:
Also ist dieser code eig. nur dazu da die länge des strings in Binär format abzuspeichern !?
Genau. ;) Das WARUM wird schon in Kapitel 2.3 auf Seite 6 erklärt: Rahmenbildung über Längenzähler :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
der13geist
Hält's aus hier
Beiträge: 10

Win Vista Ultimate x86
D7 Pro, D2007
BeitragVerfasst: Do 27.03.08 00:28 
aber würde ich es beim empfangen nicht in Hex umwandeln würde doch dort (Nun ja, angenommen in Edit1 steht "Hallo Welt") nur das stehen "#0#0#0#10" also dreimal ein Nullbyte und einmal ein Zeichen mit dem ASCII Code von 10 oder ?

_________________
01 05 54 F4
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 27.03.08 00:31 
Moin!

user profile iconder13geist hat folgendes geschrieben:
aber würde ich es beim empfangen nicht in Hex umwandeln
Das machen wir ja nur, um es überhaupt anzeigen zu können.

user profile iconder13geist hat folgendes geschrieben:
würde doch dort (Nun ja, angenommen in Edit1 steht "Hallo Welt") nur das stehen "#0#0#0#10" also dreimal ein Nullbyte und einmal ein Zeichen mit dem ASCII Code von 10 oder ?
Nein, auch das wird in Kapitel 2.3 ausführlich erläutert: Intel-CPUs schreiben lsb-first, also steht dort: #10,#0,#0,#0. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
der13geist
Hält's aus hier
Beiträge: 10

Win Vista Ultimate x86
D7 Pro, D2007
BeitragVerfasst: Do 27.03.08 00:43 
Danke mit diesen erkentnissen wird mir höchstwahrscheinlich alles klar. Ich werde dein tutorial noch einmal von anfang an durchlesen.
Ich danke für die Hilfe

MfG

_________________
01 05 54 F4
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 27.03.08 00:44 
Moin!

Bitte, gern geschehen. :)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Mann_aus_Delphi
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Di 01.04.08 19:18 
Titel: Ie bekomme ich überhaupt die korrekte IP?
Hey,
erstmal herzlichen Dank an Narses für das tolle Tutorial. :beer:
Ich habe fleißig gelesen und gebastelt, und getestet.
Auf meinem Lokalen Pc kann ich Verbindungen mit dem PC meines Bruders und dem meiner Mutter aufnehmen, jedoch nicht zu, sagen wir mal meinem Opa hundert Kilometer entfernt.

Ich schätze, dass die lokale IP dafür nicht taugt, aber welche dann? Die öffentliche geht auch nicht, zumindest zeigt er mir einen Verbindungsfehler an. Welche IP muss ich dafür nehmen, und wo bekomme ich sie her? :?: :?: :?: :eyecrazy: :dunce:
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 01.04.08 19:26 
Dafür gibt es 2 Möglichkeiten:

1. Du nutzt ein VPN wie z.B. Hamachi. In dem Fall kannst Du dann die VPN-IP nutzen.

2. Ansonsten musst Du den entfernten Rechner (also der, der Server spielt) als DMZ konfigurieren (am Router) oder über Port-Forwarding (am Router) nach draußen "weiterleiten" ...

Zu zweiterem hat Narses auch bereits einen Beitrag geschrieben, wie das geht. Ersteres kann ich aus eigener Erfahrung empfehlen ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 02.04.08 00:01 
Titel: Re: Ie bekomme ich überhaupt die korrekte IP?
Moin!

user profile iconMann_aus_Delphi hat folgendes geschrieben:
erstmal herzlichen Dank an Narses für das tolle Tutorial. :beer:
Danke für das Lob. ;)

user profile iconMann_aus_Delphi hat folgendes geschrieben:
jedoch nicht zu, sagen wir mal meinem Opa hundert Kilometer entfernt.
Hat der, der den Server stellt, einen Router im Einsatz? Dann schau mal hier. :idea:

Ansonsten könnte noch eine Firewall-Einstellung die Verbindung verhindern. :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Mann_aus_Delphi
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 14.04.08 14:28 
Titel: Noch ne Frage...
Ich den Clienten und den Server jetzt etwas erweitert und würde ihn nun gerne veröffentlichen (natürlich mit Bezug auf diese Seite und Narses Protokoll). Wenn Ihr, vor allem Narses, nichts dagegen habt, würde mich das wirklich sehr freuen! :lol: :lol: :shock:

Mann_aus_Delphi
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 14.04.08 16:23 
Solang das Rahmen-Protokoll kompatibel ist (also die Basisstruktur in der Übertragung), seh ich da wenige Probleme ... Außerdem ist ein öffentliches Tut ja dafür gedacht, dass daraus auch neue Anregungen für andre entstehen ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 17.04.08 13:15 
Titel: Re: Noch ne Frage...
Moin!

user profile iconMann_aus_Delphi hat folgendes geschrieben:
Ich den Clienten und den Server jetzt etwas erweitert und würde ihn nun gerne veröffentlichen (natürlich mit Bezug auf diese Seite und Narses Protokoll). Wenn Ihr, vor allem Narses, nichts dagegen habt,
Klar habe ich nichts dagegen. ;) Dazu eignet sich die Sparte Open Source Projekte, wenn du den Quelltext dazu tun willst (was ich hiermit vorschlagen möchte :zwinker:).

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Pseudo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16
Erhaltene Danke: 1



BeitragVerfasst: Fr 10.08.12 20:54 
Sorry, dass ich das hier ausgrabe (Tut mir echt leid!),
aber ich hätte da noch eine Frage:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TNBFPAServer.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
   begin
     LogIt('! SID:'+IntToStr(ServerPA.ConnectionsBySocket[Socket].SessionID)+
           ' Fehler [WSA:'+IntToStr(ErrorCode)+'] aufgetreten! '+Socket.RemoteAddress);
   if (Socket.Connected) then // noch verbunden?
      Socket.Close // dann Verbindung trennen
   else // sonst...
      DeleteClient(Socket); // nur noch wegräumen
   ErrorCode := 0// Fehler behandelt, keine Exception erzeugen
end;


Hier nutzt du zum Disconnecten die Funktion Socket.Close! Wäre es nicht eig. besser hier Die Disconnect Funktion vom PA zu nutzen? bei mir kommt es mit obigem Code manchmal zu einem Fehler O.o mit Disconnect klappts wie geschmiert :D

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 11.08.12 00:08 
Moin!

user profile iconPseudo hat folgendes geschrieben Zum zitierten Posting springen:
Sorry, dass ich das hier ausgrabe (Tut mir echt leid!),
aber ich hätte da noch eine Frage:
Dazu ist der Thread da, kein Problem. ;)

user profile iconPseudo hat folgendes geschrieben Zum zitierten Posting springen:
Hier nutzt du zum Disconnecten die Funktion Socket.Close! Wäre es nicht eig. besser hier Die Disconnect Funktion vom PA zu nutzen? bei mir kommt es mit obigem Code manchmal zu einem Fehler O.o mit Disconnect klappts wie geschmiert
Man beachte: wir befinden uns bereits in der Fehlerbehandlung! :shock: Die spannendere Frage scheint mir eigentlich zu sein, wie es dazu kommt, dass du an dieser Stelle überhaupt die Notwendigkeit hast, die Verbindung noch trennen zu müssen (idR ist nach einem Fehler der Socket sowieso dicht oder zumindest unbrauchbar). Das Socket.Close ist da eigentlich nur noch Dichtmasse, normalerweise kommt man da gar nicht mehr hin. 8) :idea:

Aber, ich gebe zu :?, das Trennen der Verbindung im Server ist schon immer hakelig gewesen und im Nachhinein bereue ich es etwas, dass nicht per Message gelöst zu haben (es gibt da leider ein paar unschöne Probleme mit der MessageLoop, die kriegt man nicht anders in den Griff). :nixweiss:

Warum auch immer es noch (genau genommen nachträglich, weil schon in der Fehlerbehandlung) bei dir zu Fehlern kommt, die ein PA.Disconnect statt einem Socket.Close "heilt", mach es so. An der Stelle kann man eigentlich nicht mehr viel kaputt machen (die Verbindung ist dann sowieso kaputt, sonst wärst du nicht im ErrorHandler gelandet). ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Pseudo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16
Erhaltene Danke: 1



BeitragVerfasst: Mo 13.08.12 17:02 
Ich hab den Ort jetzt gefunden :D
Wenn der Client mir was sendet und er genau dann per Taskmgr beendet wird kommt es (glaube ich) zu folgendem Problem:

Ich will die Instanz des PA zerstören, habe aber noch was in der Inbound Warteschlange...
Zumindest theoretisch könnte man ja einfach einen try-catch block um die komplette Procedur machen, weil das objekt danach ja eh zerstört wird, oder?
Übrigens danke für das geniale Tutorial, das hätte ich definitiv nicht ohne dich hinbekommen :D
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 13.08.12 17:55 
Moin!

user profile iconPseudo hat folgendes geschrieben Zum zitierten Posting springen:
Wenn der Client mir was sendet und er genau dann per Taskmgr beendet wird kommt es (glaube ich) zu folgendem Problem:
Ja, so ungefähr hatte ich mir die Situation vorgestellt. ;) warum auch immer man sowas machen sollte

user profile iconPseudo hat folgendes geschrieben Zum zitierten Posting springen:
Ich will die Instanz des PA zerstören, habe aber noch was in der Inbound Warteschlange...
Zumindest theoretisch könnte man ja einfach einen try-catch block um die komplette Procedur machen, weil das objekt danach ja eh zerstört wird, oder?
Mach´s mit einem PA.Disconnect oder per try-except, das spielt da alles keine Rolle mehr. :nixweiss:

btw: Lass mich raten, du programmierst sonst eher in PHP, oder? :zwinker:

user profile iconPseudo hat folgendes geschrieben Zum zitierten Posting springen:
Übrigens danke für das geniale Tutorial, das hätte ich definitiv nicht ohne dich hinbekommen :D
:beer:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Pseudo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16
Erhaltene Danke: 1



BeitragVerfasst: So 09.09.12 01:23 
Falls man hier auch noch einen Tutorialwunsch äußern kann:
Wie kann ich den Server multithreaden (so, dass der ProtocolAdapter nicht komplett umgeschrieben werden muss)? Ich hab dazu bis jetzt nicht viel im Internet gefunden... Und die Indys kann ich nicht leiden (unter anderem auch weil man nur eine Zeile übertragen kann?!?). Würde mich freuen! Muss ja nicht lang sein, sondern nur kurz erklären wie man es überhaupt macht ;-)
Vielen Dank