<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Server suchen]]></title><description><![CDATA[<p>Hi Leutz!</p>
<p>Hier mal wieder eine Frage zum Thema: Einen Server im LAN suchen mit TServerSocket/TClientSocket <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich habe einen Chat geschrieben (für mich und meine Arbeitskollegen :D). Nun möchte ich aber von dem umständlichen Weg, die IP-Adresse des Servers über eine Datei auf einem zentralen Netzlaufwerk zu übergeben, weg und stattdessen den Server suchen lassen. Tja und hieran beiße ich mir seit ein paar Tagen die Zähne aus.</p>
<p>Hier mal einen meiner zahllosen Ansätze.</p>
<p>Client = TClientSocket<br />
IPList = ListBox in denen die IP-Adressen enthalten sind, die befragt werden sollen</p>
<pre><code class="language-cpp">for(int i = 0; i&lt;IPList-&gt;Items-&gt;Count; ++i)
{
   Client-&gt;Address = IPList-&gt;Items-&gt;Strings[i];
   Client-&gt;Active  = true;

   if(!Client-&gt;Socket-&gt;Connected)
   {
      Client-&gt;Active  = false;
      ChatBox-&gt;Lines-&gt;Add(&quot;Keinen Server gefunden!&quot;);
   }
}
</code></pre>
<p>Die Sache ist nun folgende. Da das ganze in der for-Schleife viel zu schnell durchlaufen wird und der ClientSocket so schnell nicht reagieren kann, (so ein Verbindungsaufbau dauert ja immer ein bischen) brauche ich irgendeine andere Metode, um nach einem Server zu suchen. Ich habe auch schon ein bischen im I-Net gesucht, bin aber noch nicht auf etwas Brauchbares gestoßen.</p>
<p>Vielleicht habt ihr ja mehr Ideen und wisst wie ich das realisieren könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/79265/server-suchen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 06:55:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/79265.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Jul 2004 10:49:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Server suchen on Fri, 09 Jul 2004 10:49:53 GMT]]></title><description><![CDATA[<p>Hi Leutz!</p>
<p>Hier mal wieder eine Frage zum Thema: Einen Server im LAN suchen mit TServerSocket/TClientSocket <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich habe einen Chat geschrieben (für mich und meine Arbeitskollegen :D). Nun möchte ich aber von dem umständlichen Weg, die IP-Adresse des Servers über eine Datei auf einem zentralen Netzlaufwerk zu übergeben, weg und stattdessen den Server suchen lassen. Tja und hieran beiße ich mir seit ein paar Tagen die Zähne aus.</p>
<p>Hier mal einen meiner zahllosen Ansätze.</p>
<p>Client = TClientSocket<br />
IPList = ListBox in denen die IP-Adressen enthalten sind, die befragt werden sollen</p>
<pre><code class="language-cpp">for(int i = 0; i&lt;IPList-&gt;Items-&gt;Count; ++i)
{
   Client-&gt;Address = IPList-&gt;Items-&gt;Strings[i];
   Client-&gt;Active  = true;

   if(!Client-&gt;Socket-&gt;Connected)
   {
      Client-&gt;Active  = false;
      ChatBox-&gt;Lines-&gt;Add(&quot;Keinen Server gefunden!&quot;);
   }
}
</code></pre>
<p>Die Sache ist nun folgende. Da das ganze in der for-Schleife viel zu schnell durchlaufen wird und der ClientSocket so schnell nicht reagieren kann, (so ein Verbindungsaufbau dauert ja immer ein bischen) brauche ich irgendeine andere Metode, um nach einem Server zu suchen. Ich habe auch schon ein bischen im I-Net gesucht, bin aber noch nicht auf etwas Brauchbares gestoßen.</p>
<p>Vielleicht habt ihr ja mehr Ideen und wisst wie ich das realisieren könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/556729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556729</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Fri, 09 Jul 2004 10:49:53 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Fri, 09 Jul 2004 12:03:37 GMT]]></title><description><![CDATA[<p>mit sleep()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/556798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556798</guid><dc:creator><![CDATA[DreadlockFilbert]]></dc:creator><pubDate>Fri, 09 Jul 2004 12:03:37 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Mon, 12 Jul 2004 08:53:38 GMT]]></title><description><![CDATA[<p>Aber mit Sleep() halte ich doch das komplette Programm für die angegebene Zeit an und das war eigentlich nicht das was ich wollte. Irgendwelche anderen Vorschläge?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/558624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/558624</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Mon, 12 Jul 2004 08:53:38 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Mon, 12 Jul 2004 09:46:23 GMT]]></title><description><![CDATA[<p>Du denkst falsch: Du kannst hier nicht eine Schleife mit While oder so implementieren.. du musst indirekt eine Schleife über die verschiedenen Events bauen... Haken: Du kommst nicht mit einem einzelnen Socket aus. Du musst 2 Sockets haben und die abwechslungsweise aktiv schalten... (sofern ich mich richtig entsinne)</p>
<p>-junix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/558671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/558671</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Mon, 12 Jul 2004 09:46:23 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Mon, 12 Jul 2004 10:11:52 GMT]]></title><description><![CDATA[<p>nehm doch einfach nen Timer, und beweg dich in der Liste nach dem Intervall entweder ein Item vorwärts, oder nehm immer das erste und lösch die vorausgehenden. Du müsstest den Timeout des sockets natürlich mit der Timerzeit gleichsetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/558683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/558683</guid><dc:creator><![CDATA[peaceohm]]></dc:creator><pubDate>Mon, 12 Jul 2004 10:11:52 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Mon, 12 Jul 2004 10:32:53 GMT]]></title><description><![CDATA[<p>junix schrieb:</p>
<blockquote>
<p>du musst indirekt eine Schleife über die verschiedenen Events bauen... Haken: Du kommst nicht mit einem einzelnen Socket aus. Du musst 2 Sockets haben und die abwechslungsweise aktiv schalten... (sofern ich mich richtig entsinne)</p>
</blockquote>
<p>Achso. Ich werds mal testen und ausarbeiten. Melde mich dann bei weiteren Denkschluchten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/558695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/558695</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Mon, 12 Jul 2004 10:32:53 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Mon, 12 Jul 2004 10:50:18 GMT]]></title><description><![CDATA[<p>peaceohm schrieb:</p>
<blockquote>
<p>Du müsstest den Timeout des sockets natürlich mit der Timerzeit gleichsetzen.</p>
</blockquote>
<p>Nö. Kannst auch einfach den Timer beim Timeout auf aktiv schalten... stimmt so ginge es mit 1 Socket und 1 Timer... allerdings war ich noch nie fan von Timing-Geschichten... das fabriziert immer so blöde Nebeneffekte die man nicht vorhersehen kann...</p>
<p>-junix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/558702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/558702</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Mon, 12 Jul 2004 10:50:18 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Wed, 14 Jul 2004 10:37:54 GMT]]></title><description><![CDATA[<p>Ich habs jetzt umgesetzt und zwar folgendermaßen:<br />
Ich habe auf meiner Form jetzt 2 TClientSocket-Objekte. (<em>Client</em> und <em>Client2</em>). Ich habe über das OnError-Event dann eine Schleife erstellt um die verschiedenen Adressen zu überprüfen. Das funktioniert wunderbar. Allerdings lässt sich &quot;Client&quot; beim 2. Mal nutzen nicht mehr starten, obwohl ich explizit</p>
<pre><code class="language-cpp">Client-&gt;Active = true;
</code></pre>
<p>sage. Ich setzte im OnShow-Event der Form das erste Mal Client-&gt;Active = true;</p>
<p>Hier mal mein Code</p>
<pre><code class="language-cpp">//Ein Verbindungsaufbau ist fehlgeschlagen bei Client
void __fastcall TfrmMC::ClientError(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &amp;ErrorCode)
{
    switch(ErrorEvent)
    {
        case eeConnect:
        {
            FormSupply-&gt;setConnectFlag(false);
            //Client2 aktiv schalten und Client1 abschalten
            Client-&gt;Active = false;
            ChatBox-&gt;Lines-&gt;Add(Client-&gt;Address + &quot; &lt;= Keinen Server gefunden!&quot;);
            if(FormSupply-&gt;getAnz() &lt; IPList-&gt;Items-&gt;Count)
            {
                FormSupply-&gt;setAnz(1);
                Client2-&gt;Address = IPList-&gt;Items-&gt;Strings[2];
                Client2-&gt;Active = true; //&lt;-- Hier schalte ich auf true, lt. Debugger bleibt es aber false! :confused:
                break;
            }
            //Alle IP-Adressen durchlaufen
            else
            {
                ChatBox-&gt;Lines-&gt;Add(&quot;Keinen Server gefunden!&quot;);
                break;
            }
        }
    }
   ErrorCode = 0;
}
//---------------------------------------------------------------------------
//Ein Verbindungsaufbau ist fehlgeschlagen bei Client2
void __fastcall TfrmMC::Client2Error(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &amp;ErrorCode)
{
    switch(ErrorEvent)
    {
        case eeConnect:
        {
            FormSupply-&gt;setConnectFlag(false);
            //Client2 aktiv schalten und Client1 abschalten
            Client2-&gt;Active = false;
            ChatBox-&gt;Lines-&gt;Add(Client2-&gt;Address + &quot; &lt;= Keinen Server gefunden!&quot;);
            if(FormSupply-&gt;getAnz() &lt; IPList-&gt;Items-&gt;Count)
            {
                FormSupply-&gt;setAnz(1);
                Client-&gt;Address = IPList-&gt;Items-&gt;Strings[2];
                Client-&gt;Active = true; //&lt;-- Hier schalte ich auf true, lt. Debugger bleibt es aber false! :confused:
                break;
            }
            //Alle IP-Adressen durchlaufen
            else
            {
                ChatBox-&gt;Lines-&gt;Add(&quot;Keinen Server gefunden!&quot;);
                break;
            }
        }
    }
    Client-&gt;Active = true;
    ErrorCode = 0;
}
</code></pre>
<p>Noch als Hinweis, ich gebe hier mit Absicht feste Werte bei der IPList an, da ich es erst mal nur mit IP-Adressen teste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/560271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/560271</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Wed, 14 Jul 2004 10:37:54 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Wed, 14 Jul 2004 10:53:14 GMT]]></title><description><![CDATA[<p>üblicherweise verwendet man aber auch die Funktionen Connect und Disconnect und vergewaltigt nicht das Active-Flag (o;</p>
<p>Evtl hilft das weiter...</p>
<p>-junix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/560294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/560294</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Wed, 14 Jul 2004 10:53:14 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Wed, 14 Jul 2004 11:27:46 GMT]]></title><description><![CDATA[<p>Ich bekomms nicht hin. Ich hab jetzt Open, Open(mit Parameter), Close getestet. Bei (Dis)Connect(int Socket) findet er immer einen Server, was aber nicht sein kann. Evtl nutze ich diese Methode auch falsch?!</p>
<p>Bei Open()/Close() passiert das gleiche wie oben schon beschrieben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/560326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/560326</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Wed, 14 Jul 2004 11:27:46 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Wed, 14 Jul 2004 14:18:05 GMT]]></title><description><![CDATA[<p>Nach längerem hin-undher ab ich jetzt festgestellt, das es an der ListBox liegt. Ich kann nicht auf den 3. (und auch letzten) Eintrag zugreifen. Leider verstehe ich nicht was ich da viel falsch machen kann. Ich fange bei 0 an und gehe bis ListBox-&gt;Items-&gt;Count-1. Danke nochmal für eure Hilfe.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/760">@junix</a><br />
Ich hab das ganze jetzt so umgebaut, das man nur noch einen Client benötigt um einen Server zu suchen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Hier mal eine Version die nicht auf meine Verhältnisse zugeschnitten, sondern etwas allgemeiner gefasst ist.</p>
<p>Benötigt wird:</p>
<pre><code class="language-cpp">TClientSocket *ClientSocket1;
TRichEdit *RichEdit1; //Dient zur Ausgabe
TListBox *ListBox1; //Hier müssen alle IP-Adressen eingetragen werden
int verlauf; //dient zum Zählen
</code></pre>
<p>hier der Code im OnError-Event von ClientSocket1</p>
<pre><code class="language-cpp">void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &amp;ErrorCode)
{
    switch(ErrorEvent)
    {
        case eeConnect: //siehe Hilfe zu TErrorEvent
        {
            //Client abschalten, neue IP setzten und wieder aktiv schalten
            ClientSocket1-&gt;Close();
            RichEdit1-&gt;Lines-&gt;Add(ClientSocket1-&gt;Address + &quot; &lt;= Keinen Server gefunden!&quot;);
            verlauf++;
            if(FormSupply-&gt;getAnz() &lt; ListBox1-&gt;Items-&gt;Count)
            {
                ClientSocket1-&gt;Address = ListBox1-&gt;Items-&gt;Strings[verlauf];
                ClientSocket1-&gt;Open();
                break;
            }
            else
            {
                RichEdit1-&gt;Lines-&gt;Add(&quot;Keinen Server gefunden!&quot;);
                break;
            }
        }
    }
    ErrorCode = 0; //damit keine Exception geworfen wird
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/560479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/560479</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Wed, 14 Jul 2004 14:18:05 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Wed, 14 Jul 2004 13:35:37 GMT]]></title><description><![CDATA[<p>Hmmm sieht nett aus. Tu mir nen Gefallen und schau mal auf den Calling-Stack ob sich da was aufschaukelt oder ob nach dem Aufruf von Open() der Error-event-handler schön beendet wird, ja?</p>
<p>-junix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/560485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/560485</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Wed, 14 Jul 2004 13:35:37 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Wed, 14 Jul 2004 13:41:59 GMT]]></title><description><![CDATA[<p>Beim durchsteppen mit dem Debugger und Überwachung des Stacks hab ich keine Probleme festgestellt. Die Methode wird korrekt beendet und der Stack bleibt in konstanter Größe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/560498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/560498</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Wed, 14 Jul 2004 13:41:59 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Wed, 14 Jul 2004 14:12:14 GMT]]></title><description><![CDATA[<p>Great... (o:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/560541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/560541</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Wed, 14 Jul 2004 14:12:14 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Sun, 08 Aug 2004 19:40:44 GMT]]></title><description><![CDATA[<p>PuppetMaster2k schrieb:</p>
<blockquote>
<p>Ich bekomms nicht hin. Ich hab jetzt Open, Open(mit Parameter), Close getestet. Bei (Dis)Connect(int Socket) findet er immer einen Server, was aber nicht sein kann. Evtl nutze ich diese Methode auch falsch?!</p>
<p>Bei Open()/Close() passiert das gleiche wie oben schon beschrieben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>mich würde mal interessieren ob du inzwischen eine antowrt auf dieses problem gefunden hast... ?</p>
<p>ich hab nämlich grad mit einem ähnlichen problem zu kämpfen und meine lösung funktioniert zwar ist aber ein wenig verquer...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/577973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/577973</guid><dc:creator><![CDATA[little progger]]></dc:creator><pubDate>Sun, 08 Aug 2004 19:40:44 GMT</pubDate></item><item><title><![CDATA[Reply to Server suchen on Sun, 08 Aug 2004 20:14:41 GMT]]></title><description><![CDATA[<p>Ich hab das damals anders gemacht.<br />
Ich hab ne UDP komponete genommen und ein Broadcast gesendet. an einen bestimmten Port. Die Server die auf dem Port lauschen, habe entsprechend geantwortet.<br />
Und der Client hat das passend ausgewertet.</p>
<p>War für mich einfacher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/578000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/578000</guid><dc:creator><![CDATA[DJ BlackEagle]]></dc:creator><pubDate>Sun, 08 Aug 2004 20:14:41 GMT</pubDate></item></channel></rss>