<?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[TCP Server; Socket; Dateien senden]]></title><description><![CDATA[<p>Ich hab mir einen kleinen TCP Server geschrieben, der kann bisher mit send und receiv texte hin und her schicken. Soweit ganz gut, aber was muss ich machen, damit ich dateien senden und verschicken kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/172650/tcp-server-socket-dateien-senden</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 01:51:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/172650.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Feb 2007 09:00:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Wed, 07 Feb 2007 09:00:07 GMT]]></title><description><![CDATA[<p>Ich hab mir einen kleinen TCP Server geschrieben, der kann bisher mit send und receiv texte hin und her schicken. Soweit ganz gut, aber was muss ich machen, damit ich dateien senden und verschicken kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1224256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224256</guid><dc:creator><![CDATA[puilina]]></dc:creator><pubDate>Wed, 07 Feb 2007 09:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Wed, 07 Feb 2007 09:03:51 GMT]]></title><description><![CDATA[<p>Dasselbe, nur mit dem Inhalt der Dateien statt der Texte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1224257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224257</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 07 Feb 2007 09:03:51 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Wed, 07 Feb 2007 09:33:24 GMT]]></title><description><![CDATA[<p>ok, aber wie viel Bit bzw. Byte kann man denn gleichzeitig schicken?oder muss<br />
man das nicht beachten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1224279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224279</guid><dc:creator><![CDATA[Basingstoke]]></dc:creator><pubDate>Wed, 07 Feb 2007 09:33:24 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Wed, 07 Feb 2007 09:37:41 GMT]]></title><description><![CDATA[<p>Soviele, wie dein Socket verkraftet (afaik melden send() und recv() zurück, wieviele Daten sie verschickt/empfangen haben - wenn das nicht alle übergebenen Daten waren, mußt du den Rest evt. nochmal senden).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1224283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224283</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 07 Feb 2007 09:37:41 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Wed, 07 Feb 2007 13:35:45 GMT]]></title><description><![CDATA[<p>[EDIT] Geändert wegen einsicht</p>
<p>mach dir eine schleife</p>
<pre><code class="language-cpp">FILE* f;
int sent = 0;
int tosend = filesize;
int sendpacksize;
while(sent &lt; tosend) {
    sendpacksize = tosend - sent;
    int sucessfullsent = send(Socket, f, sendpacksize);
    sent += successfullsent;
    f += successfullsent;
}
</code></pre>
<p>beim empfang kannst du dasselbe machen<br />
ALLERDINGS<br />
solltest du bevor du sendest noch einen int-wert mit der gesamtlänge schicken damit du auf empfängerseite weist WANN die übertragung komplett ist.</p>
<p>also praktisch send(gesamtlänge) -&gt; sendschleife(datei).<br />
und beim empfänger recv(länge) -&gt; recv(datei) bis komplett.</p>
<p>es werden dir noch tausend andere eventualitäten auffallen wenn du damit arbeitest aber das würde die maximale zeichenlänge für einen post glaub ich sprengen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1224288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224288</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Wed, 07 Feb 2007 13:35:45 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Wed, 07 Feb 2007 12:43:34 GMT]]></title><description><![CDATA[<p>Das mit SO_MAX_MSG_SIZE ist quatsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1224402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224402</guid><dc:creator><![CDATA[ä]]></dc:creator><pubDate>Wed, 07 Feb 2007 12:43:34 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Wed, 07 Feb 2007 13:33:25 GMT]]></title><description><![CDATA[<p>sagt wer ? .... schreib dein namen dazu wenn du den mumm aufbringen kannst -.-<br />
und schreib am besten gleich noch wofür das dann bitte da iss, lass mich in der beziehung gern belehren aber nich mit so nem dämlich satz wie</p>
<blockquote>
<p>...das iss quatsch ...</p>
</blockquote>
<p>[EDIT] hab grad nachgesehen, hast zwar recht mit deiner aussage (biezieht sich nur auf DGRAM sockets) aber deine art ist sehr unhöflich -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1224429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224429</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Wed, 07 Feb 2007 13:33:25 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Wed, 07 Feb 2007 13:36:37 GMT]]></title><description><![CDATA[<p>C++ kennt kein getsockopt, vom Fragesteller wurde auch kein spezielles OS oder Framework genannt.</p>
<p>Wohin gehört also das getsocktopt von Dir ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1224433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224433</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Wed, 07 Feb 2007 13:36:37 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Wed, 07 Feb 2007 13:40:42 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/184">@Knuddlbaer</a>:<br />
&lt;klugscheiss&gt;Standard-C++ kennt auch kein send und receiv, also hätte keine dieser Antworten je gegeben werden dürfen.&lt;/klugscheiss&gt;</p>
<p>getsockopt ist genau wie send und recv Bestandteil von BSD-Sockets und sowohl unter UNIX (Linux) wie auch unter Windows bekannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1224435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224435</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 07 Feb 2007 13:40:42 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Wed, 07 Feb 2007 18:21:18 GMT]]></title><description><![CDATA[<p>Ceos schrieb:</p>
<blockquote>
<p>[EDIT] Geändert wegen einsicht</p>
<p>mach dir eine schleife</p>
<pre><code class="language-cpp">FILE* f;
int sent = 0;
int tosend = filesize;
int sendpacksize;
while(sent &lt; tosend) {
    sendpacksize = tosend - sent;
    int sucessfullsent = send(Socket, f, sendpacksize);
    sent += successfullsent;
    f += successfullsent;
}
</code></pre>
<p>beim empfang kannst du dasselbe machen<br />
ALLERDINGS<br />
solltest du bevor du sendest noch einen int-wert mit der gesamtlänge schicken damit du auf empfängerseite weist WANN die übertragung komplett ist.</p>
<p>also praktisch send(gesamtlänge) -&gt; sendschleife(datei).<br />
und beim empfänger recv(länge) -&gt; recv(datei) bis komplett.</p>
<p>es werden dir noch tausend andere eventualitäten auffallen wenn du damit arbeitest aber das würde die maximale zeichenlänge für einen post glaub ich sprengen</p>
</blockquote>
<p>danke für die antwort, aber ich find keine version von send die den typ FILE akzeptiert, send akzeptiert nur char.......muss ich mir die ganze datei jetzt einlesen und als textstring senden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1224634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224634</guid><dc:creator><![CDATA[puilina]]></dc:creator><pubDate>Wed, 07 Feb 2007 18:21:18 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Thu, 08 Feb 2007 08:46:26 GMT]]></title><description><![CDATA[<p>*push*, problem besteht immernoch <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/1224875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224875</guid><dc:creator><![CDATA[puilina]]></dc:creator><pubDate>Thu, 08 Feb 2007 08:46:26 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Thu, 08 Feb 2007 09:02:24 GMT]]></title><description><![CDATA[<p>puilina schrieb:</p>
<blockquote>
<p>danke für die antwort, aber ich find keine version von send die den typ FILE akzeptiert, send akzeptiert nur char.......muss ich mir die ganze datei jetzt einlesen und als textstring senden?</p>
</blockquote>
<p>Kurz: Ja, das mußt du (alternativ kannst du die Datei auch stückchenweise lesen und versenden).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1224886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224886</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 08 Feb 2007 09:02:24 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Thu, 08 Feb 2007 09:29:41 GMT]]></title><description><![CDATA[<p>kann man den FILE* nich einfach (char*) casten ?<br />
nur ne theorie, kanns grad nicht testen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1224912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224912</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 08 Feb 2007 09:29:41 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Thu, 08 Feb 2007 09:34:37 GMT]]></title><description><![CDATA[<p>Klar kannst du es casten, aber damit wirst du kaum etwas sinnvolles anstellen können. <code>FILE</code> ist eine Struktur, über die die &lt;cstdio&gt;-Funktionen auf eine BS-Datei zurückgreifen können - wenn du den FILE* in einen char* umwandelst, kannst du höchstens die Kontrollinformationen zu der Datei lesen (und mit etwas Geschick erraten, was sie darstellen sollen) - aber auf diesem Weg kommst du nicht an den Inhalt der Datei ran.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1224917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1224917</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 08 Feb 2007 09:34:37 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Thu, 08 Feb 2007 18:44:52 GMT]]></title><description><![CDATA[<p>Also das senden scheint zu funktionieren, aber beim Empfangen verhält sich mein programm irgendwie &quot;nicht den erwartungen entsprechend&quot;.</p>
<p>Ich schicke mir zum Test eine datei die 2000 Byte groß ist, wenn ich mit dem Debugger drauf gehe erhalte ich etwa ~1400 Byte und plötzlich springt der Debugger aus der Routine raus ins Nirvana.</p>
<p>Irgendwas scheitn da einen abbruch auszulösen. Der Debugger macht aber nirgendenwo weiter. Das programm befindet sich noch im debugmodus, aber nichts passiert mehr.</p>
<p>Er verlässt die schleife mittendrin, wenn etwa 2/3 aller byte gelesen wurden(sind in meinem testfall derzeit immer ~2000). Laut Debugger ereicht mein Programm nie die Return anweisung, kompilieren lässt sich aber alles fehlerfrei.</p>
<p>Die Datei dich mir sende lese ich mir mit fstream ein und schicke diese dann los, könnte es evtl. daran liegen das irgendwann ein zeichen kommt(z.b. carriege return) das den debugger so aus der bahn haut?</p>
<p>Hier mal meine Receiv-Funktion</p>
<pre><code class="language-cpp">std::string CCreateSocket::ReceivData(SOCKET recvSocket)
{
	int iLenReceived = 0;
	std::string	tempString;

	while(iLenReceived +=recv(recvSocket, this-&gt;buf, 256, 0))
	{
		std::cout&lt;&lt;WSAGetLastError();
		tempString = tempString + std::string(this-&gt;buf);
		/* Wegen dem Empfangen gucken, läuft im Loop, ohne Ende */
	}

	return tempString;	
}
</code></pre>
<p>Sieht jemand woran es liegen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1225254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1225254</guid><dc:creator><![CDATA[puilina]]></dc:creator><pubDate>Thu, 08 Feb 2007 18:44:52 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Fri, 09 Feb 2007 06:59:48 GMT]]></title><description><![CDATA[<p>*push*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1225433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1225433</guid><dc:creator><![CDATA[puilina]]></dc:creator><pubDate>Fri, 09 Feb 2007 06:59:48 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Fri, 09 Feb 2007 08:29:15 GMT]]></title><description><![CDATA[<p>Für die Abbruchbedingung mußt du den Rückgabewert von recv() direkt überprüfen - nicht die Summe aller bisher empfangenen Daten.</p>
<p>PS: &quot;Reciev&quot; schreibt man übrigens mit IE <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="😃"
    /> - edit: Oder auch nicht - also vergiss den letzten Satz wieder <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1225437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1225437</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 09 Feb 2007 08:29:15 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Fri, 09 Feb 2007 07:49:13 GMT]]></title><description><![CDATA[<p>mal abgesehen das du den wert der emfangenen daten mit nichts vergleichst (dateiende z.B.)</p>
<p>puilina schrieb:</p>
<blockquote>
<p>Irgendwas scheitn da einen abbruch auszulösen.</p>
<p>Wenn der Dateinhalt nicht reiner text ist kann es passieren das du bei tempstring nicht alles lesen kannst, wenn dort irgendwo eine 0 steht (also binär 0) kann es sein das jeder weitere inhalt von tempstring ignoriert wird.</p>
<p>... könnte es evtl. daran liegen das irgendwann ein zeichen kommt(z.b. carriege return) das den debugger so aus der bahn haut?</p>
<p>vielleicht nicht carriage return aber gut möglich das du wegen irgendeinem sonderzeichen hängen bleibst.</p>
<p>Hier mal meine Receiv-Funktion</p>
<pre><code class="language-cpp">std::string CCreateSocket::ReceivData(SOCKET recvSocket)
{
	int iLenReceived = 0;
	std::string	tempString;
        int iFileEnd;
        int res = recv(recvSocket, iFileEnd, sizeof(int), 0); // Dateilänge empfangen
                                               //muss auf serverseite natürlich vorher gesendet werden
        if (res = 0) {
            cout&lt;&lt;WSAGetLastError();
            return &quot;&quot;;
        }

	while(iLenReceived &lt; iFileEnd) // Auf vollständigkeit prüfen
	{
		res = recv(recvSocket, this-&gt;buf, 256, 0);  // Empfangen
                if (res = 0) {    // Auf Fehler prüfen
                   cout&lt;&lt;WSAGetLastError();
                   return tempString;
                }
                iLenReceived += res;   // Empfang aufsummieren
		tempString = tempString + std::string(this-&gt;buf); // das geht nur mit reinen textdateien gut
	}

	return tempString;	
}
</code></pre>
</blockquote>
<p>PS @ CStoll will ja nicht rechthaberisch wirken (obwohl es mir jemand unbedingt unterstellen wollte) aber<br />
<a href="http://dict.leo.org/ende?lp=ende&amp;p=/gQPU.&amp;search=receive" rel="nofollow">http://dict.leo.org/ende?lp=ende&amp;p=/gQPU.&amp;search=receive</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1225459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1225459</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Fri, 09 Feb 2007 07:49:13 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Server; Socket; Dateien senden on Fri, 09 Feb 2007 08:28:32 GMT]]></title><description><![CDATA[<p>Ceos schrieb:</p>
<blockquote>
<p>PS @ CStoll will ja nicht rechthaberisch wirken (obwohl es mir jemand unbedingt unterstellen wollte) aber<br />
<a href="http://dict.leo.org/ende?lp=ende&amp;p=/gQPU.&amp;search=receive" rel="nofollow">http://dict.leo.org/ende?lp=ende&amp;p=/gQPU.&amp;search=receive</a></p>
</blockquote>
<p>OK, du hast mich überzeugt <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1225476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1225476</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 09 Feb 2007 08:28:32 GMT</pubDate></item></channel></rss>