<?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[AnsiPos Problem]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>Ich habe ein dickes Problem. Über ein UDP Socket sende ich für ein Chat Tool den Username via Broadcast damit jeder Client in einem Subnet eine aktuelle Userliste verwalten kann. Alle 30sec sendet jeder Client seinen Username und löst somit ein OnReceive Ereignis auf jeder Station aus:</p>
<p><strong>userlist ist eine TStringList</strong></p>
<pre><code class="language-cpp">if (NumberBytes&gt;-1 &amp;&amp; NumberBytes&lt;1024)
    {

        char Buff[1024];
        int j,substring_laenge;
        String check;
        bool value = false;

        UDP1-&gt;ReadBuffer(Buff, 1024, j);
        Buff[j]=0;

      check = FromIP +&quot; &quot;+ String(Buff);

       int a = 1;
       while(a &lt; check.Length())
       {
          if (check[a] == ' ')
          {
           substring_laenge = a - 1;
           a = check.Length();
          }
         a++;
        }

    //--Disconnect erkennen und aus Stringlist löschen
    if (check[check.Length()] == 'x' &amp;&amp; check[check.Length() -1] == 'x')
    {

       for (int i = 0; i &lt; userlist-&gt;Count; i++)
       {

          if (userlist-&gt;Strings[i].AnsiPos(FromIP.SubString(1,substring_laenge)) == 1)
          userlist-&gt;Delete(i);

       }
     }
      else
     {

         for (int i = 0; i &lt; userlist-&gt;Count; i++)
        {

          if (userlist-&gt;Strings[i].AnsiPos(FromIP.SubString(1,substring_laenge)) == 1)
          {

              if (userlist-&gt;Strings[i] != FromIP +&quot; &quot;+ String(Buff))
              userlist-&gt;Strings[i] = FromIP +&quot; &quot;+ String(Buff);

              value = true;

          }
        }

        if (value == false)
        userlist-&gt;Add(FromIP +&quot; &quot;+ Buff);

        userlist-&gt;Sort();
        ListBox1-&gt;Clear();
        ListBox1-&gt;Items-&gt;AddStrings(userlist);

     }

  }
</code></pre>
<p>Warum wird in der StringListe trotz gleicher IP des Absenders bei jedem Senden ein neuer Eintrag erzeugt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Ich verwende doch schon AnsiPos um nur die Stellen zu aktualiseren wo bereits schon ein Eintrag vorhanden ist.</p>
<p>Beispiel nach mehreren Broadcasts:</p>
<p>192.168.0.1 David<br />
192.168.0.1 David<br />
192.168.0.1 David<br />
192.168.0.188 Alfons</p>
<p>Kann mir jemand helfen ? Ich weiß momentan nicht weiter <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>
<p>David</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/103867/ansipos-problem</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 17:38:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/103867.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Mar 2005 22:25:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to AnsiPos Problem on Sun, 13 Mar 2005 22:26:48 GMT]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>Ich habe ein dickes Problem. Über ein UDP Socket sende ich für ein Chat Tool den Username via Broadcast damit jeder Client in einem Subnet eine aktuelle Userliste verwalten kann. Alle 30sec sendet jeder Client seinen Username und löst somit ein OnReceive Ereignis auf jeder Station aus:</p>
<p><strong>userlist ist eine TStringList</strong></p>
<pre><code class="language-cpp">if (NumberBytes&gt;-1 &amp;&amp; NumberBytes&lt;1024)
    {

        char Buff[1024];
        int j,substring_laenge;
        String check;
        bool value = false;

        UDP1-&gt;ReadBuffer(Buff, 1024, j);
        Buff[j]=0;

      check = FromIP +&quot; &quot;+ String(Buff);

       int a = 1;
       while(a &lt; check.Length())
       {
          if (check[a] == ' ')
          {
           substring_laenge = a - 1;
           a = check.Length();
          }
         a++;
        }

    //--Disconnect erkennen und aus Stringlist löschen
    if (check[check.Length()] == 'x' &amp;&amp; check[check.Length() -1] == 'x')
    {

       for (int i = 0; i &lt; userlist-&gt;Count; i++)
       {

          if (userlist-&gt;Strings[i].AnsiPos(FromIP.SubString(1,substring_laenge)) == 1)
          userlist-&gt;Delete(i);

       }
     }
      else
     {

         for (int i = 0; i &lt; userlist-&gt;Count; i++)
        {

          if (userlist-&gt;Strings[i].AnsiPos(FromIP.SubString(1,substring_laenge)) == 1)
          {

              if (userlist-&gt;Strings[i] != FromIP +&quot; &quot;+ String(Buff))
              userlist-&gt;Strings[i] = FromIP +&quot; &quot;+ String(Buff);

              value = true;

          }
        }

        if (value == false)
        userlist-&gt;Add(FromIP +&quot; &quot;+ Buff);

        userlist-&gt;Sort();
        ListBox1-&gt;Clear();
        ListBox1-&gt;Items-&gt;AddStrings(userlist);

     }

  }
</code></pre>
<p>Warum wird in der StringListe trotz gleicher IP des Absenders bei jedem Senden ein neuer Eintrag erzeugt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Ich verwende doch schon AnsiPos um nur die Stellen zu aktualiseren wo bereits schon ein Eintrag vorhanden ist.</p>
<p>Beispiel nach mehreren Broadcasts:</p>
<p>192.168.0.1 David<br />
192.168.0.1 David<br />
192.168.0.1 David<br />
192.168.0.188 Alfons</p>
<p>Kann mir jemand helfen ? Ich weiß momentan nicht weiter <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>
<p>David</p>
]]></description><link>https://www.c-plusplus.net/forum/post/744039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/744039</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Sun, 13 Mar 2005 22:26:48 GMT</pubDate></item><item><title><![CDATA[Reply to AnsiPos Problem on Sun, 13 Mar 2005 22:39:57 GMT]]></title><description><![CDATA[<p>Warum machst du mit der FromIp nen Substring?</p>
<pre><code class="language-cpp">if (userlist-&gt;Strings[i].AnsiPos(FromIP.SubString(1,substring_laenge)) == 1)
</code></pre>
<p>Was steht denn in FromIp drin? Es gibt übrigens auch noch</p>
<pre><code class="language-cpp">bool __fastcall AnsiStartsText(const AnsiString ASubText, const AnsiString AText);
</code></pre>
<p>Gib dir doch mal aus, was in FromIp drinsteht. Evtl. ist das ja auch falsch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/744045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/744045</guid><dc:creator><![CDATA[-**xXx**-]]></dc:creator><pubDate>Sun, 13 Mar 2005 22:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to AnsiPos Problem on Sun, 13 Mar 2005 22:43:19 GMT]]></title><description><![CDATA[<p>Ich habe mich jetzt nicht vollkommen durch Deinen Quelltext gelesen. Aber einen Vorschlag hätte ich auf jeden<br />
Fall anzubringen.</p>
<p>Anstatt die IP-Adressen und Benutzernamen so zu speichern:</p>
<p>Zero01 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">userlist-&gt;Add(FromIP +&quot; &quot;+ Buff);
</code></pre>
</blockquote>
<p>würde ich das so machen:</p>
<pre><code class="language-cpp">userlist-&gt;Values[FromIP] = Buff;
</code></pre>
<p>Dann kannst Du anstatt</p>
<p>Zero01 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">for (int i = 0; i &lt; userlist-&gt;Count; i++)
       {

          if (userlist-&gt;Strings[i].AnsiPos(FromIP.SubString(1,substring_laenge)) == 1)
          userlist-&gt;Delete(i);

       }
</code></pre>
</blockquote>
<p>einfach das schreiben:</p>
<pre><code class="language-cpp">int ipIndex = userlist-&gt;IndexOfName(FromIP);
if (ipIndex &gt;= 0)
  userlist-&gt;Delete(ipIndex);
</code></pre>
<p>Vielleicht ist das dann auch einfacher zu debuggen und Du kommst dem tatsächlichen Fehler auf die Spur.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/744048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/744048</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Sun, 13 Mar 2005 22:43:19 GMT</pubDate></item><item><title><![CDATA[Reply to AnsiPos Problem on Mon, 14 Mar 2005 22:26:48 GMT]]></title><description><![CDATA[<p>-=]xXx[=- schrieb:</p>
<blockquote>
<p>Warum machst du mit der FromIp nen Substring?</p>
<pre><code class="language-cpp">if (userlist-&gt;Strings[i].AnsiPos(FromIP.SubString(1,substring_laenge)) == 1)
</code></pre>
<p>Was steht denn in FromIp drin?...........<br />
Gib dir doch mal aus, was in FromIp drinsteht. Evtl. ist das ja auch falsch...</p>
</blockquote>
<p>War ne geistige Umnachtung von mir <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Vielen Dank euch allen ! Super Infos !</p>
<p>So gehts 1A :</p>
<pre><code class="language-cpp">if (NumberBytes&gt;-1 &amp;&amp; NumberBytes&lt;1024)
    {

      char Buff[1024];
      int j;
      String check;

      UDP1-&gt;ReadBuffer(Buff, 1024, j);
      Buff[j]=0;

     check = String(Buff);

    //--Disconnect erkennen und aus Stringlist löschen
    if (check.SubString(1,2) == &quot;N:&quot; &amp;&amp; check[check.Length()] == 'x')
    {

      int index = userlist-&gt;IndexOfName(FromIP);

      if (index &gt;= 0)
      {
       ListBox1-&gt;Items-&gt;Delete(ListBox1-&gt;Items-&gt;IndexOf(userlist-&gt;Values[FromIP]));
       userlist-&gt;Delete(index);
       userlist-&gt;Sort();
      }

    }
      else
     {

         if (check.SubString(1,2) == &quot;N:&quot;)
        {
            check = check.SubString(3,check.Length());

            if (userlist-&gt;Values[FromIP] != check)
           {
            ListBox1-&gt;Items-&gt;Delete(ListBox1-&gt;Items-&gt;IndexOf(userlist-&gt;Values[FromIP]));
            userlist-&gt;Values[FromIP] = check;
            ListBox1-&gt;Items-&gt;Add(userlist-&gt;Values[FromIP]);
           }

        }

   }
 }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/744075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/744075</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Mon, 14 Mar 2005 22:26:48 GMT</pubDate></item><item><title><![CDATA[Reply to AnsiPos Problem on Mon, 14 Mar 2005 08:39:08 GMT]]></title><description><![CDATA[<p>Wenn ich mal eine OT-Frage einwerfen darf: Warum hast du eigentlich haufenweise Leerzeilen in deinem Code? Das bläht den Code doch nur auf und zum einfachen Lesen hilft das auch nicht unbedingt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/744137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/744137</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Mon, 14 Mar 2005 08:39:08 GMT</pubDate></item><item><title><![CDATA[Reply to AnsiPos Problem on Mon, 14 Mar 2005 17:14:04 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9337">@Puppet</a>:<br />
Stimmt, guter Tip. Habe alles im Quelltext neu formatiert und läßt sich jetzt deutlich besser lesen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/744468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/744468</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Mon, 14 Mar 2005 17:14:04 GMT</pubDate></item></channel></rss>