<?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[Socket Programmierung]]></title><description><![CDATA[<p>Hallo Ihr,</p>
<p>möchte mich bei euch bedanken, dass Forum ist wirklich Gold wert und komme auch schon wieder mit einem neuen Problem.<br />
Man hätt halt doch Informatiker werden sollen :)....</p>
<p>Also ich habe ein Programm geschrieben, das aus zwei Threads besteht. Nämlich einer horcht auf einem Port und empfängt bestimmte Nachrichten aus dem Internet. Sind Nachrichten eingegangen wird der Schreibvorgang aktiviert.</p>
<p>So ist die Paketgröße so klein, dass auf die Datei aufeinmal gesendet werden kann habe ich keine Probleme, funktioniert prima. Ist die Datei zu groß, sprich der Server brauch 2 oder mehr Sendbefehle, dann hängt sich der RECV-Befehl auf. Und irgendwie funktioniert auch das Senden beim Server nicht mehr wirklich.<br />
Wie kann ich nun sicherstellen, dass mein CLient auch wirklich nur auf RECV geht, sobald eine Nachricht in der QUEUE liegt?</p>
<p>Danke für Eure Hilfe:<br />
Tentone</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218469/socket-programmierung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 23:44:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218469.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 Jul 2008 10:53:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Socket Programmierung on Mon, 21 Jul 2008 10:53:39 GMT]]></title><description><![CDATA[<p>Hallo Ihr,</p>
<p>möchte mich bei euch bedanken, dass Forum ist wirklich Gold wert und komme auch schon wieder mit einem neuen Problem.<br />
Man hätt halt doch Informatiker werden sollen :)....</p>
<p>Also ich habe ein Programm geschrieben, das aus zwei Threads besteht. Nämlich einer horcht auf einem Port und empfängt bestimmte Nachrichten aus dem Internet. Sind Nachrichten eingegangen wird der Schreibvorgang aktiviert.</p>
<p>So ist die Paketgröße so klein, dass auf die Datei aufeinmal gesendet werden kann habe ich keine Probleme, funktioniert prima. Ist die Datei zu groß, sprich der Server brauch 2 oder mehr Sendbefehle, dann hängt sich der RECV-Befehl auf. Und irgendwie funktioniert auch das Senden beim Server nicht mehr wirklich.<br />
Wie kann ich nun sicherstellen, dass mein CLient auch wirklich nur auf RECV geht, sobald eine Nachricht in der QUEUE liegt?</p>
<p>Danke für Eure Hilfe:<br />
Tentone</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1550828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550828</guid><dc:creator><![CDATA[Tentone]]></dc:creator><pubDate>Mon, 21 Jul 2008 10:53:39 GMT</pubDate></item><item><title><![CDATA[Reply to Socket Programmierung on Mon, 21 Jul 2008 13:38:51 GMT]]></title><description><![CDATA[<p>verstehe die Frage nicht.</p>
<p>send und recv sind doch jeweils in einem eigenen Thread. Warum sollte dann eine Nachricht da sein damit recv arbeitet?<br />
Wahrscheinlich sind die Buffer nicht synchronisiert. Oder die/der Buffer ist zu klein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1550958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550958</guid><dc:creator><![CDATA[idefix]]></dc:creator><pubDate>Mon, 21 Jul 2008 13:38:51 GMT</pubDate></item><item><title><![CDATA[Reply to Socket Programmierung on Mon, 21 Jul 2008 13:44:47 GMT]]></title><description><![CDATA[<p>idefix schrieb:</p>
<blockquote>
<p>verstehe die Frage nicht.</p>
<p>send und recv sind doch jeweils in einem eigenen Thread. Warum sollte dann eine Nachricht da sein damit recv arbeitet?<br />
Wahrscheinlich sind die Buffer nicht synchronisiert. Oder die/der Buffer ist zu klein.</p>
</blockquote>
<p>Hallo,</p>
<p>ja genau da steckt der Teufel drin. Die Befehle sind nicht synchronisiert.<br />
Das Problem ist nun, den Server kann ich nicht &quot;synchronisieren&quot; das ist ein Programm B was einfach nur sendet (wann egal). D.h. ich muss meinen clienten dazubringen den RCV-Befehl wirklich nur auszuführen sobald eine Message bereitliegt.<br />
Wie funktioniert so etwas?</p>
<p>Gruß<br />
Tentone</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1550969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550969</guid><dc:creator><![CDATA[Tentone]]></dc:creator><pubDate>Mon, 21 Jul 2008 13:44:47 GMT</pubDate></item><item><title><![CDATA[Reply to Socket Programmierung on Mon, 21 Jul 2008 13:59:29 GMT]]></title><description><![CDATA[<p>Tentone schrieb:</p>
<blockquote>
<p>Wie funktioniert so etwas?</p>
</blockquote>
<p>Mit select oder poll. Die Doku deiner Socket-Implementierung sollte dir weiterhelfen. Wenn du eh mit Threads arbeitest, ist das aber nicht sinnvoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1550979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550979</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Mon, 21 Jul 2008 13:59:29 GMT</pubDate></item><item><title><![CDATA[Reply to Socket Programmierung on Mon, 21 Jul 2008 13:54:09 GMT]]></title><description><![CDATA[<p>Ich verstehe dein Problem auch nicht ganz, aber benutzt du Threads um die ankommenden Pakete zu empfangen?<br />
Grundsätzlich sieht es ja immer etwa so aus:</p>
<p>- Sender -&gt; Schickt Daten, teilweise zerstückelt.<br />
- Empfänger Thread 1 -&gt; Empfängt Daten, bis ein vollständiges Packet zusammengebaut ist und meldet es dem Thread 2. Thread 1 steht grundsätzlich immer in Wartestellung und wartet bis neue Daten eintreffen.<br />
- Empfänder Thread 2 -&gt; Wartet oder überprüft immer wieder mal, ob Thread 1 ein vollständiges Paket empfangen hat. Es kann auch sein, dass er über Events benachrichtig wird.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1550981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550981</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 21 Jul 2008 13:54:09 GMT</pubDate></item><item><title><![CDATA[Reply to Socket Programmierung on Mon, 21 Jul 2008 14:00:47 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">/* Client */
// Thread 1
while(true)
{
 p=new bufinfo;
 n=recv(s,p-&gt;buf,p-&gt;len);
 notifyRecv(p);
}

// Thread 2
{
 while(popNotify(p))
 {

   n=0;
   while(n&lt;p-&gt;len))
   {
    n=send(p-&gt;buf,p-&gt;len)
   }
   delete p;
 }
}
</code></pre>
<p>Nur vom Prinzip her. Fehlerbehandlung muß noch gemacht werden und Speichermanagement.<br />
Das wars einer horcht und einer sendet. Allerdings ist jetzt das Delta recv-send Aufgabe der Applikation. Denn RAM ist eine begrenzte Resource.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1550985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550985</guid><dc:creator><![CDATA[idefix]]></dc:creator><pubDate>Mon, 21 Jul 2008 14:00:47 GMT</pubDate></item><item><title><![CDATA[Reply to Socket Programmierung on Mon, 21 Jul 2008 14:08:36 GMT]]></title><description><![CDATA[<p>Es gibt auch WSAEvents - die kannste auslösen lassen, wenn du was empfängst...</p>
<p>Also per WinAPI:</p>
<pre><code class="language-cpp">WSAEventSelect (socket_number, wsa_event, FD_READ | FD_CLOSE)
</code></pre>
<p>und dann nimmste nen Thread:</p>
<pre><code class="language-cpp">unsigned __stdcall threadfunction (void *parameter)
{
//...
WSAEvent wsa_event = static_cast &lt;WSAEvent&gt; (parameter);
while (WAIT_TIMEOUT != WaitForSingleObject (wsa_event, INFINITE))
{
if (0 == recv (...))
 break; //disconnect
}
</code></pre>
<p>Mit Send machste es einfach so, dass du iwo nen string (oder besser nen std::deque &lt;char&gt;) hast und da das anfügst, was du senden willst und nen event setzt - dann übergibst du die beiden events in nem array dem thread und hast dort halt WaitForMultipleObject (events, INFINITE) - und guckst dann, welches event ausgelöst wurde - bei dem einen sendest du was, bei dem anderen guckst du, obs nen disconnect war (recv == 0) ansonsten empfängst du iwas und tust das halt in nen anderen container...</p>
<p>der rest sollte von allein klar werden?!</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1550992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550992</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 21 Jul 2008 14:08:36 GMT</pubDate></item><item><title><![CDATA[Reply to Socket Programmierung on Tue, 22 Jul 2008 14:15:27 GMT]]></title><description><![CDATA[<p>hallo !</p>
<p>Ich möchte wissen wie man z.B diese URL :&quot;http://www.c- <a href="http://plusplus.de/forum/posting-var-mode-is-reply-and-t-is-218469.html" rel="nofollow">plusplus.de/forum/posting-var-mode-is-reply-and-t-is-218469.html</a>&quot; als IP Adresse ausgeben kann.<br />
durch gethostbyname(&quot;adresse&quot;) geht leider nicht !!</p>
<p>z.B :adresse : <a href="http://www.XXX.de" rel="nofollow">www.XXX.de</a>\XXX\XXX\XXX.html</p>
<p>danke !!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551732</guid><dc:creator><![CDATA[DOCK]]></dc:creator><pubDate>Tue, 22 Jul 2008 14:15:27 GMT</pubDate></item><item><title><![CDATA[Reply to Socket Programmierung on Tue, 22 Jul 2008 15:22:04 GMT]]></title><description><![CDATA[<p>DOCK schrieb:</p>
<blockquote>
<p>Ich möchte wissen wie man z.B diese URL :&quot;http://www.c- <a href="http://plusplus.de/forum/posting-var-mode-is-reply-and-t-is-218469.html" rel="nofollow">plusplus.de/forum/posting-var-mode-is-reply-and-t-is-218469.html</a>&quot; als IP Adresse ausgeben kann.<br />
durch gethostbyname(&quot;adresse&quot;) geht leider nicht !!</p>
<p>z.B :adresse : <a href="http://www.XXX.de" rel="nofollow">www.XXX.de</a>\XXX\XXX\XXX.html</p>
</blockquote>
<p>1. Mach deinen eigenen Thread auf.<br />
2. Lies dich mal in die URLs ein. Man kann nur der vordere Teil in eine IP verwandeln. Also <a href="http://www.XXX.de" rel="nofollow">www.XXX.de</a>, der Rest ist eine Pfadangabe, welche dann über das HTTP Protokoll übermittelt wird.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551778</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 22 Jul 2008 15:22:04 GMT</pubDate></item></channel></rss>