<?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 soll befehle ausführen]]></title><description><![CDATA[<p>Hey folgendes ich hab mir einen client und einen server gebastelt mit dem code aus nem tut und nun hab ich zwei probleme 1. wie krieg ich hin das man beim client die ip des servers angibt und 2. soll zb wenn ich eine 1 sende der server den befehl unter 1 bei einem switch ausführen... beides funzt aber net</p>
<p>hier mal der client</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;winsock2.h&gt;
#include &lt;stdio.h&gt;

//Prototypen
int startWinsock(void);
char serverip[20];

int main()
{
  long rc;
  SOCKET s;
  SOCKADDR_IN addr;
  char buf[256];
  char ip;

  printf(&quot;Bitte Ziel-IP eingeben: &quot;);
   scanf(&quot;%c&quot;,&amp;ip);
   fflush(stdin);

  // 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
  s=socket(AF_INET,SOCK_STREAM,0);
  if(s==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;);
  }

  // Verbinden
  memset(&amp;addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
  addr.sin_family=AF_INET;
  addr.sin_port=htons(12345); // wir verwenden mal port 12345
  addr.sin_addr.s_addr=inet_addr(&quot;127.0.0.1&quot;); 

 /* Was muss ich nun anstatt &quot;127.0.0.1&quot; eingeben.. hab ja schon ne abfrage der ip am anfang mit char*/

  rc=connect(s,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR));
  if(rc==SOCKET_ERROR)
  {
    printf(&quot;Fehler: connect gescheitert, fehler code: %d\n&quot;,WSAGetLastError());
    return 1;
  }
  else
  {
    printf(&quot;Verbunden mit %c \n&quot;,ip);
  }

  // Daten austauschen
  while(rc!=SOCKET_ERROR)
  {
    printf(&quot;\nBitte Befehl eingeben: &quot;);
    gets(buf);
    send(s,buf,strlen(buf),0);
    rc=recv(s,buf,256,0);
    if(rc==0)
    {
      printf(&quot;Server hat die Verbindung getrennt..\n&quot;);
      break;
    }
    if(rc==SOCKET_ERROR)
    {
      printf(&quot;Fehler: recv, fehler code: %d\n&quot;,WSAGetLastError());
      break;
    }
    buf[rc]='\0';
    printf(&quot;\nServer antwortet: %s\n&quot;,buf);
  }
  closesocket(s);
  WSACleanup();
  return 0;
}

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&amp;wsa);
}
</code></pre>
<p>und hier mal der server</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;winsock2.h&gt;
#include &lt;stdio.h&gt;

//Prototypen
int startWinsock(void);

int main()
{
  long rc;
  SOCKET acceptSocket;
  SOCKET connectedSocket;
  SOCKADDR_IN addr;
  char buf[256];
  char buf2[300];

  // 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;);
  }

  // Socket binden
  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;);
  }

  // In den listen Modus
  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;);
  }

  // Verbindung annehmen
  connectedSocket=accept(acceptSocket,NULL,NULL);
  if(connectedSocket==INVALID_SOCKET)
  {
    printf(&quot;Fehler: accept, fehler code: %d\n&quot;,WSAGetLastError());
    return 1;
  }
  else
  {
    printf(&quot;Neue Verbindung wurde akzeptiert!\n&quot;);
  }

  // Daten austauschen
  while(rc!=SOCKET_ERROR)
  {
    rc=recv(connectedSocket,buf,256,0);
    if(rc==0)
    {
      printf(&quot;Server hat die Verbindung getrennt..\n&quot;);
      break;
    }
    if(rc==SOCKET_ERROR)
    {
      printf(&quot;Fehler: recv, fehler code: %d\n&quot;,WSAGetLastError());
      break;
    }
    buf[rc]='\0';
    printf(&quot;Client sendet: %s\n&quot;,buf);

      switch(buf) {

      case 8 :  printf(&quot;\n PC wird heruntergefahren \n\n&quot;);
                system(&quot;C:\\WINDOWS\\System32\\shutdown.exe -s -f -t 0 &quot;);  
                break;                                 

      case 9 :  printf(&quot;\n Programm wird beendet \n&quot;);      break;

      default:  printf(&quot;\n Unbekannte Auswahl \n\n&quot;);
      }
    sprintf(buf2,&quot;Du mich auch %s&quot;,buf);
    rc=send(connectedSocket,buf2,strlen(buf2),0);
  }
  closesocket(acceptSocket);
  closesocket(connectedSocket);
  WSACleanup();
  return 0;
}

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&amp;wsa);
}
</code></pre>
<p>Ich benutz win xp und borland compiler... und beim kompilieren vom server krieg cih den fehler das ich integer beim switch brauch.. und wenn ich zb case 'asd' nehme um auf char zuzugreifen gibts noch mehr fehler...</p>
<p>ich denk mir die variable buf passt halt net aber wie und vorallem kann ich die passen umformatieren</p>
<p>ich hoffe ma ihr könnt mir helfen weil ich hab echt keinen plan was ich noch mahcen soll... hab schon seit stunden daran rumgebastelt aber noch will funzen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238442/server-soll-befehle-ausführen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 00:29:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238442.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Apr 2009 15:46:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Server soll befehle ausführen on Fri, 10 Apr 2009 15:46:09 GMT]]></title><description><![CDATA[<p>Hey folgendes ich hab mir einen client und einen server gebastelt mit dem code aus nem tut und nun hab ich zwei probleme 1. wie krieg ich hin das man beim client die ip des servers angibt und 2. soll zb wenn ich eine 1 sende der server den befehl unter 1 bei einem switch ausführen... beides funzt aber net</p>
<p>hier mal der client</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;winsock2.h&gt;
#include &lt;stdio.h&gt;

//Prototypen
int startWinsock(void);
char serverip[20];

int main()
{
  long rc;
  SOCKET s;
  SOCKADDR_IN addr;
  char buf[256];
  char ip;

  printf(&quot;Bitte Ziel-IP eingeben: &quot;);
   scanf(&quot;%c&quot;,&amp;ip);
   fflush(stdin);

  // 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
  s=socket(AF_INET,SOCK_STREAM,0);
  if(s==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;);
  }

  // Verbinden
  memset(&amp;addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
  addr.sin_family=AF_INET;
  addr.sin_port=htons(12345); // wir verwenden mal port 12345
  addr.sin_addr.s_addr=inet_addr(&quot;127.0.0.1&quot;); 

 /* Was muss ich nun anstatt &quot;127.0.0.1&quot; eingeben.. hab ja schon ne abfrage der ip am anfang mit char*/

  rc=connect(s,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR));
  if(rc==SOCKET_ERROR)
  {
    printf(&quot;Fehler: connect gescheitert, fehler code: %d\n&quot;,WSAGetLastError());
    return 1;
  }
  else
  {
    printf(&quot;Verbunden mit %c \n&quot;,ip);
  }

  // Daten austauschen
  while(rc!=SOCKET_ERROR)
  {
    printf(&quot;\nBitte Befehl eingeben: &quot;);
    gets(buf);
    send(s,buf,strlen(buf),0);
    rc=recv(s,buf,256,0);
    if(rc==0)
    {
      printf(&quot;Server hat die Verbindung getrennt..\n&quot;);
      break;
    }
    if(rc==SOCKET_ERROR)
    {
      printf(&quot;Fehler: recv, fehler code: %d\n&quot;,WSAGetLastError());
      break;
    }
    buf[rc]='\0';
    printf(&quot;\nServer antwortet: %s\n&quot;,buf);
  }
  closesocket(s);
  WSACleanup();
  return 0;
}

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&amp;wsa);
}
</code></pre>
<p>und hier mal der server</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;winsock2.h&gt;
#include &lt;stdio.h&gt;

//Prototypen
int startWinsock(void);

int main()
{
  long rc;
  SOCKET acceptSocket;
  SOCKET connectedSocket;
  SOCKADDR_IN addr;
  char buf[256];
  char buf2[300];

  // 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;);
  }

  // Socket binden
  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;);
  }

  // In den listen Modus
  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;);
  }

  // Verbindung annehmen
  connectedSocket=accept(acceptSocket,NULL,NULL);
  if(connectedSocket==INVALID_SOCKET)
  {
    printf(&quot;Fehler: accept, fehler code: %d\n&quot;,WSAGetLastError());
    return 1;
  }
  else
  {
    printf(&quot;Neue Verbindung wurde akzeptiert!\n&quot;);
  }

  // Daten austauschen
  while(rc!=SOCKET_ERROR)
  {
    rc=recv(connectedSocket,buf,256,0);
    if(rc==0)
    {
      printf(&quot;Server hat die Verbindung getrennt..\n&quot;);
      break;
    }
    if(rc==SOCKET_ERROR)
    {
      printf(&quot;Fehler: recv, fehler code: %d\n&quot;,WSAGetLastError());
      break;
    }
    buf[rc]='\0';
    printf(&quot;Client sendet: %s\n&quot;,buf);

      switch(buf) {

      case 8 :  printf(&quot;\n PC wird heruntergefahren \n\n&quot;);
                system(&quot;C:\\WINDOWS\\System32\\shutdown.exe -s -f -t 0 &quot;);  
                break;                                 

      case 9 :  printf(&quot;\n Programm wird beendet \n&quot;);      break;

      default:  printf(&quot;\n Unbekannte Auswahl \n\n&quot;);
      }
    sprintf(buf2,&quot;Du mich auch %s&quot;,buf);
    rc=send(connectedSocket,buf2,strlen(buf2),0);
  }
  closesocket(acceptSocket);
  closesocket(connectedSocket);
  WSACleanup();
  return 0;
}

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&amp;wsa);
}
</code></pre>
<p>Ich benutz win xp und borland compiler... und beim kompilieren vom server krieg cih den fehler das ich integer beim switch brauch.. und wenn ich zb case 'asd' nehme um auf char zuzugreifen gibts noch mehr fehler...</p>
<p>ich denk mir die variable buf passt halt net aber wie und vorallem kann ich die passen umformatieren</p>
<p>ich hoffe ma ihr könnt mir helfen weil ich hab echt keinen plan was ich noch mahcen soll... hab schon seit stunden daran rumgebastelt aber noch will funzen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694028</guid><dc:creator><![CDATA[c&#x2F;c++ neuling]]></dc:creator><pubDate>Fri, 10 Apr 2009 15:46:09 GMT</pubDate></item><item><title><![CDATA[Reply to Server soll befehle ausführen on Fri, 10 Apr 2009 21:02:24 GMT]]></title><description><![CDATA[<p>Mit <code>switch</code> kannst du nur Integer-Werte vergleichen. Wenn du einzelne Zeichen (z. B. das erste Zeichen in deiner Zeichenkette), kannst du <code>switch (buf [0])</code> verwenden. Außerdem vergleichst du mit Zahlen: <code>'8'</code> ist nicht das selbe wie <code>8</code> .</p>
<p>Wenn du ganze Zeichenketten vergleichen willst:</p>
<pre><code class="language-cpp">if (!strcmp (buf, &quot;8&quot;))
{
    ...
}
else if (!strcmp (buf, &quot;9&quot;))
{
    ...
}
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1694153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694153</guid><dc:creator><![CDATA[devkid]]></dc:creator><pubDate>Fri, 10 Apr 2009 21:02:24 GMT</pubDate></item><item><title><![CDATA[Reply to Server soll befehle ausführen on Fri, 10 Apr 2009 21:10:30 GMT]]></title><description><![CDATA[<p>devkid schrieb:</p>
<blockquote>
<p>Mit <code>switch</code> kannst du nur Integer-Werte vergleichen. Wenn du einzelne Zeichen (z. B. das erste Zeichen in deiner Zeichenkette), kannst du <code>switch (buf [0])</code> verwenden. Außerdem vergleichst du mit Zahlen: <code>'8'</code> ist nicht das selbe wie <code>8</code> .</p>
<p>Wenn du ganze Zeichenketten vergleichen willst:</p>
<pre><code class="language-cpp">if (!strcmp (buf, &quot;8&quot;))
{
    ...
}
else if (!strcmp (buf, &quot;9&quot;))
{
    ...
}
...
</code></pre>
</blockquote>
<p>recv(..) empfängt nicht zwingend den ganzen String auf einmal. Dh. ev. ist der &quot;String&quot; nocht nicht null terminiert. Das würde strcmp(..) ganz schön durcheinander bringen.</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694158</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Fri, 10 Apr 2009 21:10:30 GMT</pubDate></item><item><title><![CDATA[Reply to Server soll befehle ausführen on Fri, 10 Apr 2009 21:48:28 GMT]]></title><description><![CDATA[<p>hallo und ojemine</p>
<p>gleich am anfang des clients musst du ein array statt eines einzelnen zeichens deklarieren und zwar soviel um eine ip in dotted-schreibweise zu fassen. z.b.:</p>
<pre><code class="language-cpp">char ip[64]; // sollte reichen
scanf(&quot;%s&quot;, ip); // string einlesen
</code></pre>
<p>bei der printf-aktion gilt das selbe.</p>
<p>dann</p>
<pre><code class="language-cpp">fflush(stdin);
</code></pre>
<p>ist verboten! wo haben die leute das immer her <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>die ip gibst du einfach mit</p>
<pre><code class="language-cpp">inet_addr(ip);
</code></pre>
<p>an</p>
<p>da du nur eine ziffer sendest, kannst du auch direkt mit</p>
<pre><code class="language-cpp">buffer[0] == '1'
</code></pre>
<p>arbeiten. ich würde allerdings auf der client-seite den befehl in ein z.b. int<br />
umwandeln und den dann senden. desweiteren ist es <strong>nicht</strong> garantiert,<br />
dass send alles mitnimmt was man reinstopft und recv auch nicht alles ausgibt.</p>
<p>es kann durchaus sein, dass die hälfte noch unterwegs ist. du musst also in einer schleife solange senden bis alles weg ist und auch in einer schleife alles wieder empfangen, bis du das volle packet hast. dazu könnte man einfach die größe vorne weg schicken:</p>
<pre><code class="language-cpp">// SENDEN
unsigned size = strlen(buf);
int result = send(soc, reinterpret_cast&lt;char *&gt;(&amp;size), sizeof(size), 0);
// result testen
unsigned rest = size;
while (rest)
{
    result = send(soc, reinterpret_cast&lt;char *&gt;(buf) + (size - rest), rest, 0);
    if (result == 0)
        // verbindung getrennt
    if (result == -1)
        // error
    rest -= result;
}
// EMPFANGEN:
unsigned size;
inr result = recv(soc, reinterpret_cast&lt;char *&gt;(&amp;size), sizeof(size), 0);
// result testen
char *buf = new char[size]; // löschen nicht vergessen!!
unsigned rest = size;
while (rest)
{
    result = recv(reinterpret_cast&lt;char *&gt;(buf) + (size - rest), rest, 0);
    if (result == 0)
        // verbindung getrennt
    if (result == -1)
        // error
    rest -= result;
}
</code></pre>
<p>allerding ist es unwahrscheinlich, dass das netzwerk ein 2 Byte Packet zerlegt.<br />
desweiteren sendet windows immer <strong>alles</strong> oder <strong>nichts</strong>, weshalb man sich die schleife sparen kann. ist jedoch sonst nicht portabel :p</p>
<p>btw: falsches forum <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/1694176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694176</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Fri, 10 Apr 2009 21:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to Server soll befehle ausführen on Fri, 10 Apr 2009 23:44:40 GMT]]></title><description><![CDATA[<p>ok danke für die antowrten und den support soweit... ich werd des morgen mal soweit probiern umzusetzen</p>
<p>der string wir doch hiermit null-terminiert oder hab ich da was falsch verstanden</p>
<pre><code>buf[rc]='\0';
    printf(&quot;Client sendet: %s\n&quot;,buf);
</code></pre>
<p>ach und</p>
<pre><code>fflush(stdin);
</code></pre>
<p>hab ich aus em c/c++ tutorial von galileo computing oder so</p>
<p>und wie kann ich mit</p>
<pre><code>send(s,buf,strlen(buf),0);
</code></pre>
<p>einen int wert senden<br />
buf muss doch char sein</p>
<p>sry für die noob fragen aber ich hab halt schon lang nixmehr mit c/c++ gemacht und war eh nie viel weiter wwie die basics, die ich halt noch halbwegs so drauf hab <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1694211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694211</guid><dc:creator><![CDATA[c&#x2F;c++ neuling]]></dc:creator><pubDate>Fri, 10 Apr 2009 23:44:40 GMT</pubDate></item><item><title><![CDATA[Reply to Server soll befehle ausführen on Sat, 11 Apr 2009 07:28:32 GMT]]></title><description><![CDATA[<blockquote>
<p>buf muss doch char sein</p>
</blockquote>
<p>Nein, buf muss const char* sein (dein array wird in einen solchen pointer &quot;konvertiert&quot;.). Du kannst auf alles sinnige und unsinnige mit buf als const char* zeigen und damit versenden.</p>
<p>Edit:<br />
Bsp:<br />
const char* buf = reinterpret_cast&lt;const char*&gt;(&amp;a);<br />
const size_t len = sizeof(a);<br />
int ret = send(s, buf, len, 0);</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694256</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sat, 11 Apr 2009 07:28:32 GMT</pubDate></item><item><title><![CDATA[Reply to Server soll befehle ausführen on Sat, 11 Apr 2009 07:50:57 GMT]]></title><description><![CDATA[<p>ich hab jetz ma alles soweit umgesetzt und jetzt funktioniert es endlich nochmals vielen dank an euch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694258</guid><dc:creator><![CDATA[c&#x2F;c++ neuling]]></dc:creator><pubDate>Sat, 11 Apr 2009 07:50:57 GMT</pubDate></item><item><title><![CDATA[Reply to Server soll befehle ausführen on Sat, 11 Apr 2009 09:02:23 GMT]]></title><description><![CDATA[<p>so jungs jetz hab ich nur noch ein problem und zwar wird der server auch beendet wenn der client geschlossen wird und des liegt ja daran</p>
<pre><code>while(rc!=SOCKET_ERROR)
   {
    rc=recv(connectedSocket,buf,256,0);
    if(rc==0)
    {
      printf(&quot;Server hat die Verbindung getrennt..\n&quot;);
      break;
    }
</code></pre>
<p>und wenn ich folgendes mach funzt es net un der server spinnt</p>
<pre><code>while(rc!=SOCKET_ERROR)
   {
    rc=recv(connectedSocket,buf,256,0);
    if(rc==0)
    {
  rc=listen(acceptSocket,10);
  if(rc==SOCKET_ERROR)
  {
    printf(&quot;Fehler: listen, fehler code: %d\n&quot;,WSAGetLastError());
    return 1;
  }

  // Verbindung annehmen
  connectedSocket=accept(acceptSocket,NULL,NULL);
  if(connectedSocket==INVALID_SOCKET)
  {
    printf(&quot;Fehler: accept, fehler code: %d\n&quot;,WSAGetLastError());
    return 1;
  }
    }
</code></pre>
<p>kann man irgiendwie machen das der wieder vor der while schleifen aufs listen springt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694277</guid><dc:creator><![CDATA[c&#x2F;c++ neuling]]></dc:creator><pubDate>Sat, 11 Apr 2009 09:02:23 GMT</pubDate></item><item><title><![CDATA[Reply to Server soll befehle ausführen on Sat, 11 Apr 2009 09:05:41 GMT]]></title><description><![CDATA[<p>ja, nimm listen raus aus while.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694281</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sat, 11 Apr 2009 09:05:41 GMT</pubDate></item><item><title><![CDATA[Reply to Server soll befehle ausführen on Sat, 11 Apr 2009 09:28:12 GMT]]></title><description><![CDATA[<p>sry aber da haste wohl was falsch verstanden des listen is ja eigtl net drin in while ich habs halt mal reingemacht um zu probiern ob der server so nach einem disconnect vom client wieder auf neue verbindungen wartet und das richtige listen und so kommt vor der while nun weiß ich aber net wie ich machen soll das wenn der cleint beendet wird der der server anstatt zu beenden aus der while rausgeht und wieder nach oben zum listen springt...</p>
<p>goto geht ja nur zb in nem switch wenn ich des richtig verstanden hab also kann ich damit ja net arbeiten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694295</guid><dc:creator><![CDATA[c&#x2F;c++ neuling]]></dc:creator><pubDate>Sat, 11 Apr 2009 09:28:12 GMT</pubDate></item><item><title><![CDATA[Reply to Server soll befehle ausführen on Sun, 12 Apr 2009 13:29:06 GMT]]></title><description><![CDATA[<p>Nein, <code>listen</code> wird nur einmal aufgerufen, nicht vor jedem <code>accept</code> .</p>
<p>Normalerweise sollte so eine Schleife in etwa so aussehen (Pseudo-Code):</p>
<pre><code class="language-cpp">while (true)
{
    new_socket = accept (s, NULL, 0);
    if (new_socket &lt; 0)
        continue;

    // Kommunizieren
    rc = recv (s, buf, len, 0);
    if (rc &lt; 0)
        continue;

    // ...
}
</code></pre>
<p>Bei jedem continue springt er dann wieder zum Anfang der Schleife und wartet auf eine neue Verbindung.</p>
<p>Wenn du richtig gut bist ( <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ) kannst du jedes mal, wenn eine Verbindung ankommt, einen eigenen Thread startet, so dass du mehrere Clients verarbeiten kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694794</guid><dc:creator><![CDATA[devkid]]></dc:creator><pubDate>Sun, 12 Apr 2009 13:29:06 GMT</pubDate></item><item><title><![CDATA[Reply to Server soll befehle ausführen on Sun, 12 Apr 2009 15:40:21 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if (rc &lt; 0)
{
   // fehler
}
else if (rc == 0)
{
   // verbindung von gegenstelle geschlossen
}
else
{
   // daten bekommen...
}
</code></pre>
<p>Nur als Anmekrung...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694878</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 12 Apr 2009 15:40:21 GMT</pubDate></item></channel></rss>