<?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[Fragen zur aus und Eingabe auf der Konsole Konsole]]></title><description><![CDATA[<p>Hallo,<br />
ich würde gern zur übung folgendes Problem lösen:<br />
ich habe einenen socketserver für mehrere clients als Wndlosschleife, diese macht dann auch Ausgaben in die Konsole,<br />
nun möchte ich aber das man auch gleichzeitig eine Eingabe machen kann um die serverschleife zu steuern.</p>
<p>Qausie die unterste Zeile der Konsole meine bfehlseingabe bildet.</p>
<p>Ich habe mir gedacht das über threads zu lösen, aber geht es dann auch einfach umzusetzen das man in eien Konsolen fenster gleichzeitig eine eingabe und eine laufende ausgabe macht?</p>
<p>bei Threads habe ich dann noch eine Frage ob c++ auch eine allgemein gültige thread lösung hat, habe was von std::thread gelesen, habe aber im netz bisher nur dürftig informationen dazu gefunden. Oder muss ich warten bis boost in c++ implementiert wird.</p>
<p>Ich würde den code gern Crossplatform fähig halten ^^</p>
<p>Gruß<br />
^^</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/314146/fragen-zur-aus-und-eingabe-auf-der-konsole-konsole</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 12:43:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314146.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Feb 2013 19:42:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fragen zur aus und Eingabe auf der Konsole Konsole on Thu, 21 Feb 2013 19:42:19 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich würde gern zur übung folgendes Problem lösen:<br />
ich habe einenen socketserver für mehrere clients als Wndlosschleife, diese macht dann auch Ausgaben in die Konsole,<br />
nun möchte ich aber das man auch gleichzeitig eine Eingabe machen kann um die serverschleife zu steuern.</p>
<p>Qausie die unterste Zeile der Konsole meine bfehlseingabe bildet.</p>
<p>Ich habe mir gedacht das über threads zu lösen, aber geht es dann auch einfach umzusetzen das man in eien Konsolen fenster gleichzeitig eine eingabe und eine laufende ausgabe macht?</p>
<p>bei Threads habe ich dann noch eine Frage ob c++ auch eine allgemein gültige thread lösung hat, habe was von std::thread gelesen, habe aber im netz bisher nur dürftig informationen dazu gefunden. Oder muss ich warten bis boost in c++ implementiert wird.</p>
<p>Ich würde den code gern Crossplatform fähig halten ^^</p>
<p>Gruß<br />
^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2300783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2300783</guid><dc:creator><![CDATA[seb-eisdrache]]></dc:creator><pubDate>Thu, 21 Feb 2013 19:42:19 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur aus und Eingabe auf der Konsole Konsole on Thu, 21 Feb 2013 19:54:15 GMT]]></title><description><![CDATA[<p>Threads sind eine schlechte Idee hat aus erst diesen Gedanken, habe aber den entscheidenen Tipp im Forum bekommen.<br />
Epoll unter Linux, kqueue unter BSD/Solaris oder IOCP unter Windows sollte sein was du suchst.<br />
Zu epoll und kqueue kann ich sagen das die einfach zu programmieren sind zu IOCP kann ich nichts sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2300788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2300788</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Thu, 21 Feb 2013 19:54:15 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur aus und Eingabe auf der Konsole Konsole on Thu, 21 Feb 2013 22:22:40 GMT]]></title><description><![CDATA[<p>für epoll habe ich jetzt nur beispiele gefunden, welche ähnlich funktioniern wie select()</p>
<p>hier mal mein server code (ist im grunde das server tutorial von <a href="http://www.c-worker.ch" rel="nofollow">www.c-worker.ch</a>)</p>
<pre><code>#include &lt;windows.h&gt;

#include &lt;winsock2.h&gt;

#include &lt;stdio.h&gt;
#define MAX_CLIENTS 10
//Prototypen

int startWinsock(void);

int main()
{

    int rc;

    SOCKET acceptSocket;
    //SOCKET connectedSocket;
    SOCKADDR_IN addr;
    char buf[256];
    char buf2[300];

    // zusätzliche Variabeln
    FD_SET fdSet;
    SOCKET clients[MAX_CLIENTS];
    int i;

    // Winsock starten

    rc=startWinsock();

    if(rc!=0)
    {

        printf(&quot;Fehler: startWinsock, fehler code: %d\n&quot;,rc);

        return 1;

    }
    else
    {

        printf(&quot;Winsock gestartet!\n&quot;);

    }

    // Socket erstellen

    acceptSocket=socket(AF_INET,SOCK_STREAM,0);

    if(acceptSocket==INVALID_SOCKET)
    {

        printf(&quot;Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n&quot;,WSAGetLastError());

        return 1;

    }
    else
    {

        printf(&quot;Socket erstellt!\n&quot;);

    }

    memset(&amp;addr,0,sizeof(SOCKADDR_IN));

    addr.sin_family=AF_INET;

    addr.sin_port=htons(12345);

    addr.sin_addr.s_addr=ADDR_ANY;

    rc=bind(acceptSocket,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR_IN));

    if(rc==SOCKET_ERROR)
    {

        printf(&quot;Fehler: bind, fehler code: %d\n&quot;,WSAGetLastError());

        return 1;

    }
    else
    {

        printf(&quot;Socket an port 12345 gebunden\n&quot;);

    }

    rc=listen(acceptSocket,10);

    if(rc==SOCKET_ERROR)
    {

        printf(&quot;Fehler: listen, fehler code: %d\n&quot;,WSAGetLastError());

        return 1;

    }
    else
    {

        printf(&quot;acceptSocket ist im listen Modus....\n&quot;);

    }

    //clients initialisieren
    for(i=0;i&lt;MAX_CLIENTS;i++)
    {
        clients[i]=INVALID_SOCKET;
    }

    while(1)
    {

        FD_ZERO(&amp;fdSet); // Inhalt leeren
        FD_SET(acceptSocket,&amp;fdSet); // Den Socket der verbindungen annimmt hinzufügen

        // alle gültigen client sockets hinzufügen (nur die die nicht INVALID_SOCKET sind)
        for(i=0;i&lt;MAX_CLIENTS;i++)
        {
            if(clients[i]!=INVALID_SOCKET)
            {
                FD_SET(clients[i],&amp;fdSet);
            }
        }

        rc=select(0,&amp;fdSet,NULL,NULL,NULL); // nicht vergessen den ersten parameter bei anderen betriebssystem anzugeben
        if(rc==SOCKET_ERROR)
        {
            printf(&quot;Fehler: select, fehler code: %s\n&quot;,WSAGetLastError());
            return 1;
        }

        // acceptSocket is im fd_set? =&gt; verbindung annehmen (sofern es platz hat)
        if(FD_ISSET(acceptSocket,&amp;fdSet)) {
            // einen freien platz für den neuen client suchen, und die verbingung annehmen
            for(i=0;i&lt;MAX_CLIENTS;i++)
            {
                if(clients[i]==INVALID_SOCKET)
                {
                    clients[i]=accept(acceptSocket,NULL,NULL);
                    printf(&quot;Neuen Client angenommen (%d)\n&quot;,i);
                    break;
                }
            }
        }

        // prüfen wlecher client sockets im fd_set sind
        for(i=0;i&lt;MAX_CLIENTS;i++)
        {
            if(clients[i]==INVALID_SOCKET)
            {
                continue; // ungültiger socket, d.h. kein verbunder client an dieser position im array
            }
            if(FD_ISSET(clients[i],&amp;fdSet))
            {
                rc=recv(clients[i],buf,256,0);
                // prüfen ob die verbindung geschlossen wurde oder ein fehler auftrat
                if(rc==0 || rc==SOCKET_ERROR)
                {
                    printf(&quot;Client %d hat die Verbindung geschlossen\n&quot;,i);
                    closesocket(clients[i]); // socket schliessen
                    clients[i]=INVALID_SOCKET; // seinen platz wieder freigeben
                }
                else
                {
                    buf[rc]='\0';
                    // daten ausgeben und eine antwort senden
                    printf(&quot;Client %d hat folgendes gesandt: %s\n&quot;,i,buf);
                    // antwort senden
                    sprintf(buf2,&quot;Du mich auch %s\n&quot;,buf);
                    send(clients[i],buf2,(int)strlen(buf2),0);
                }
            }
        }
    }
    closesocket(acceptSocket);
    WSACleanup();
    return 0;

}

int startWinsock(void)

{

    WSADATA wsa;

    return WSAStartup(MAKEWORD(2,0),&amp;wsa);

}
</code></pre>
<p>nur mein problem ist, wie kann man den server nun sauber abschalten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2300840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2300840</guid><dc:creator><![CDATA[seb-eisdrache]]></dc:creator><pubDate>Thu, 21 Feb 2013 22:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur aus und Eingabe auf der Konsole Konsole on Fri, 22 Feb 2013 07:57:49 GMT]]></title><description><![CDATA[<p>Ich mache das (grob beschrieben) so, dass ich listen in einem Thread ausführe, dem ich den Socket(zeiger) als Parameter übergebe.<br />
Im Hauptthread warte ich dann zB auf eine Eingabe, und wenn ich den Server beenden will, schließe ich den listen - Socket, so dass der listen - Thread beim Accept einen Fehler bekommt, und sich sauber beenden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2300895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2300895</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Fri, 22 Feb 2013 07:57:49 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur aus und Eingabe auf der Konsole Konsole on Fri, 22 Feb 2013 21:44:34 GMT]]></title><description><![CDATA[<p>nun fehlt nur noch die gescheite aus und eingabe von text in die console für die server anwendung</p>
<p>Eingabe zur steuerung und ausgabe zur kontrolle ähnlich wie bei manchen Linux Programmen, wo könnte man dort ansetzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2301231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2301231</guid><dc:creator><![CDATA[seb-eisdrache]]></dc:creator><pubDate>Fri, 22 Feb 2013 21:44:34 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur aus und Eingabe auf der Konsole Konsole on Fri, 22 Feb 2013 21:52:04 GMT]]></title><description><![CDATA[<p>2ten thread</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2301233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2301233</guid><dc:creator><![CDATA[fred++]]></dc:creator><pubDate>Fri, 22 Feb 2013 21:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur aus und Eingabe auf der Konsole Konsole on Fri, 22 Feb 2013 21:59:30 GMT]]></title><description><![CDATA[<p>schon klar, aber wie unterteilt man das &quot;konsolen&quot; fenster in einen Eingabe bereich und einen Ausgabe bereich?</p>
<p>wenn man in der Laufenden ausgabe etwas mit std::cin abfragt wird das doch sehr abenteuerlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2301235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2301235</guid><dc:creator><![CDATA[seb-eisdrache]]></dc:creator><pubDate>Fri, 22 Feb 2013 21:59:30 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur aus und Eingabe auf der Konsole Konsole on Sat, 23 Feb 2013 10:42:54 GMT]]></title><description><![CDATA[<p>du brauchst sowas wie eine gotoxy funtkion, die den cursor an die gewünschte stelle setzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2301293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2301293</guid><dc:creator><![CDATA[fred++]]></dc:creator><pubDate>Sat, 23 Feb 2013 10:42:54 GMT</pubDate></item></channel></rss>