<?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[Problem mit Winsock und Winapi]]></title><description><![CDATA[<p>Hallo,<br />
ich will ein Chat Program coden, allerdings hab ich ein Problem: select() läuft solange durch, bis endlich eine Nachricht kommt (neuer Client etc.) und so kann ich nie WM_PAINT etc. behandeln.</p>
<p>Dann hab ich mir überlegt: Mach doch einfach einen Server als Konsole und alle anderen greifen mit nem schönen Winapi Programm darauf zu, nächstes Problem: senden kann ich, aber empfangen wie? recv() blockiert ebenfalls!</p>
<p>Gibts da ne Lösung bzw. ein Beispielprogramm?</p>
<p>Danke im Voraus <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/222521/problem-mit-winsock-und-winapi</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 19:57:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222521.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 13 Sep 2008 19:59:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Winsock und Winapi on Sat, 13 Sep 2008 19:59:49 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich will ein Chat Program coden, allerdings hab ich ein Problem: select() läuft solange durch, bis endlich eine Nachricht kommt (neuer Client etc.) und so kann ich nie WM_PAINT etc. behandeln.</p>
<p>Dann hab ich mir überlegt: Mach doch einfach einen Server als Konsole und alle anderen greifen mit nem schönen Winapi Programm darauf zu, nächstes Problem: senden kann ich, aber empfangen wie? recv() blockiert ebenfalls!</p>
<p>Gibts da ne Lösung bzw. ein Beispielprogramm?</p>
<p>Danke im Voraus <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581483</guid><dc:creator><![CDATA[Arr0ws]]></dc:creator><pubDate>Sat, 13 Sep 2008 19:59:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Winsock und Winapi on Sat, 13 Sep 2008 20:02:21 GMT]]></title><description><![CDATA[<p>was faselst du da? schonmal was von threads, nonblocking und asynchronous sockets gehört? und bevor du fragst: sufu, google. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581485</guid><dc:creator><![CDATA[asdca]]></dc:creator><pubDate>Sat, 13 Sep 2008 20:02:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Winsock und Winapi on Sat, 13 Sep 2008 21:09:42 GMT]]></title><description><![CDATA[<p>Du kannst entweder Deine Sockets nicht-blockierend machen, oder aber für die Kommunikation (und für den Listen-Socket des Servers) eigene Threads starten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581518</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Sat, 13 Sep 2008 21:09:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Winsock und Winapi on Sun, 14 Sep 2008 00:06:55 GMT]]></title><description><![CDATA[<p><a href="http://www.tangentsoft.net/wskfaq/articles/io-strategies.html" rel="nofollow">http://www.tangentsoft.net/wskfaq/articles/io-strategies.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581582</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 14 Sep 2008 00:06:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Winsock und Winapi on Sun, 14 Sep 2008 07:08:30 GMT]]></title><description><![CDATA[<p>auf <a href="http://c-worker.ch" rel="nofollow">c-worker.ch</a> steht zwar was von nichtblockierende Sockets, die werden aber nicht näher behandelt und als schlecht eingestuft <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="😃"
    /></p>
<p>ich versuchs mal <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/1581610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581610</guid><dc:creator><![CDATA[Arr0ws]]></dc:creator><pubDate>Sun, 14 Sep 2008 07:08:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Winsock und Winapi on Sun, 14 Sep 2008 10:52:21 GMT]]></title><description><![CDATA[<p>hab das gleiche prob wie arrows, habs jetzt versucht zu lösen und ioctlsocket() benutzt, sowie die codes aus den ersten tuts von <a href="http://c-worker.ch" rel="nofollow">c-worker.ch</a>:</p>
<p>Client:</p>
<pre><code class="language-cpp">#include &lt;winsock2.h&gt;
#include &lt;windows.h&gt;
#include &lt;stdio.h&gt;

//Prototypen
int startWinsock(void);

int main()
{
  long rc;
  SOCKET s;
  SOCKADDR_IN addr;
  char buf[256];
  unsigned long flags = 1;
  ioctlsocket(s, FIONBIO, &amp;flags);

  // 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;); // zielrechner ist unser eigener

  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 127.0.0.1..\n&quot;);
  }

  // Daten austauschen
  while(rc!=SOCKET_ERROR)
  {
    printf(&quot;\nZeichenfolge eingeben [max 256]: &quot;);
    gets(buf);
    send(s,buf,strlen(buf),1);
    rc=recv(s,buf,256,1);
    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>Server:</p>
<pre><code class="language-cpp">#include &lt;winsock2.h&gt;
#include &lt;windows.h&gt;

#include &lt;stdio.h&gt;

//Prototypen
int startWinsock(void);

int main()
{
  long rc;
  SOCKET acceptSocket;
  SOCKET connectedSocket;
  unsigned long flags = 1;
  ioctlsocket(acceptSocket, FIONBIO, &amp;flags);
  ioctlsocket(connectedSocket, FIONBIO, &amp;flags);
  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,1);
    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);
    sprintf(buf2,&quot;Du mich auch %s&quot;,buf);
    rc=send(connectedSocket,buf2,strlen(buf2),1);
  }
  closesocket(acceptSocket);
  closesocket(connectedSocket);
  WSACleanup();
  return 0;
}

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&amp;wsa);
}
</code></pre>
<p>Das Problem ist, dass es trotzdem blockiert, was hab ich falsch gemacht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581656</guid><dc:creator><![CDATA[mr one]]></dc:creator><pubDate>Sun, 14 Sep 2008 10:52:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Winsock und Winapi on Sun, 14 Sep 2008 10:53:50 GMT]]></title><description><![CDATA[<p>lol du kannst ioctlsocket(s, FIONBIO, &amp;flags); natürlich erst anwenden nachdem der socket mit socket() erstellt wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581658</guid><dc:creator><![CDATA[asdca]]></dc:creator><pubDate>Sun, 14 Sep 2008 10:53:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Winsock und Winapi on Sun, 14 Sep 2008 18:24:56 GMT]]></title><description><![CDATA[<p>Habs soweit hingebogen, ein Fehler ist noch irgendwo drin - Nachrichten vom Server empfangen kann ich nicht, es kommt immer recv fehler 10035</p>
<p>Hier nochmal der Code vom Client:</p>
<pre><code class="language-cpp">#include &lt;winsock2.h&gt;
#include &lt;windows.h&gt;

#include &lt;stdio.h&gt;

//Prototypen
int startWinsock(void);

int main()
{
  long rc;
  SOCKET s;
  SOCKADDR_IN addr;
  char buf[256];
  char buf2[256];
  unsigned long flags = 1;

  // 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;); // zielrechner ist unser eigener

  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 127.0.0.1..\n&quot;);
  }

  // Daten austauschen
  ioctlsocket(s, FIONBIO, &amp;flags);
  while(s != INVALID_SOCKET)
  {
    printf(&quot;\nZeichenfolge eingeben [max 256]: &quot;);
    gets(buf);
    send(s,buf,strlen(buf),0);
    rc=recv(s,buf2,256,1);
    buf2[rc]='\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;
    }
    printf(&quot;\nServer antwortet: %s\n&quot;,buf2);

  }
  closesocket(s);
  WSACleanup();
  return 0;
}

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&amp;wsa);
}
</code></pre>
<p>der Code vom Server ist der gleiche <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/1581878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581878</guid><dc:creator><![CDATA[mr one]]></dc:creator><pubDate>Sun, 14 Sep 2008 18:24:56 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Winsock und Winapi on Sun, 14 Sep 2008 18:44:12 GMT]]></title><description><![CDATA[<p>der code vom server ist in diesem fall ohne blocking sockets, also der originale vom <a href="http://c-worker.ch" rel="nofollow">c-worker.ch</a> tut</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581889</guid><dc:creator><![CDATA[mr one]]></dc:creator><pubDate>Sun, 14 Sep 2008 18:44:12 GMT</pubDate></item></channel></rss>