<?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 recvfrom; Fehler 10014]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich versuche gerade notdürftig ein Programm zu schreiben welches eine Datei öffnet und diese in 40 Byte Blöcken an einen &quot;Server&quot; schickt. Dieser schickt nach erfolgreicher Verarbeitung dieser 40 Byte ein UDP Paket mit dem Inhalt &quot;next&quot; --&gt; jetzt können die nächsten 40 Byte folgen.</p>
<p>Mein Problem hierbei ist nur, dass ich beim empfangen dieser Bestätigung immer einen Fehler bekomme(Errorcode: 10014) welcher besagt dass der Buffer für die empfangen Daten zu klein ist.</p>
<p>Habe mir das Ganze mit Wireshark angesehen, das &quot;next&quot; wird so übertragen wie es soll(4 Byte Datenblock).</p>
<p>Da ich meinen Fehler nicht finde, hoffe ich dass ihr diesen evtl. finden könnt.</p>
<p>Hier der Code(Ja ich weiß dass er scheußlich geschrieben ist, ist aber wie gesagt nur ein schneller Test..):</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;WinSock2.h&gt;

using namespace std;

int main()
{
	string ip;
	fstream fb;
	fb.open (&quot;record.mp3&quot;,ios::binary | ios::in);
	char buffer[40];
	char re[4];

	cout &lt;&lt; &quot;started&quot; &lt;&lt; endl;

	sockaddr_in dest;
	sockaddr_in local;
	WSAData data;

	WSAStartup( MAKEWORD( 2, 2 ), &amp;data );

	local.sin_family = AF_INET;
	local.sin_addr.s_addr = inet_addr( &quot;192.168.0.20&quot; );
	local.sin_port = 0; // choose any

	dest.sin_family = AF_INET;
	dest.sin_addr.s_addr = inet_addr( &quot;192.168.0.100&quot; );
	dest.sin_port = htons( 85 );

	// create the socket
	SOCKET s = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
	// bind to the local address
	bind( s, (sockaddr *)&amp;local, sizeof(local) );

	// send the pkt
	while(fb.eof() == false)
	{
		for(int i = 0; i &lt; 40; i++)
		{
			if(fb.eof() == false)
			{
				buffer[i] = fb.get();
				//cout &lt;&lt; buffer[i];
			}
			else
				buffer[i] = 'x';
		}
		int ret = sendto(s, buffer, 40, 0, (sockaddr *)&amp;dest, sizeof(dest));
		if (ret != 0) 
		{
        printf(&quot;sendto failed with error %d\n&quot;, WSAGetLastError());
        //return 1;
		}

		while(re != &quot;next&quot;)
		{
			int rec = recvfrom(s, re, 4, 0, (sockaddr *)&amp;dest, (int *)sizeof(dest));

			if (rec != 0) 
			{
				printf(&quot;recvfrom failed with error %d\n&quot;, WSAGetLastError());
				//return 1;
			}
		}
		re[0] = 'a';
	}

	closesocket(s);
	WSACleanup();
	fb.close();
	cout &lt;&lt; &quot;finished&quot; &lt;&lt; endl;

	return 0;
}
</code></pre>
<p>MfG Testsocket</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285454/problem-mit-recvfrom-fehler-10014</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 07:59:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285454.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Apr 2011 20:56:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit recvfrom; Fehler 10014 on Wed, 20 Apr 2011 20:56:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich versuche gerade notdürftig ein Programm zu schreiben welches eine Datei öffnet und diese in 40 Byte Blöcken an einen &quot;Server&quot; schickt. Dieser schickt nach erfolgreicher Verarbeitung dieser 40 Byte ein UDP Paket mit dem Inhalt &quot;next&quot; --&gt; jetzt können die nächsten 40 Byte folgen.</p>
<p>Mein Problem hierbei ist nur, dass ich beim empfangen dieser Bestätigung immer einen Fehler bekomme(Errorcode: 10014) welcher besagt dass der Buffer für die empfangen Daten zu klein ist.</p>
<p>Habe mir das Ganze mit Wireshark angesehen, das &quot;next&quot; wird so übertragen wie es soll(4 Byte Datenblock).</p>
<p>Da ich meinen Fehler nicht finde, hoffe ich dass ihr diesen evtl. finden könnt.</p>
<p>Hier der Code(Ja ich weiß dass er scheußlich geschrieben ist, ist aber wie gesagt nur ein schneller Test..):</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;WinSock2.h&gt;

using namespace std;

int main()
{
	string ip;
	fstream fb;
	fb.open (&quot;record.mp3&quot;,ios::binary | ios::in);
	char buffer[40];
	char re[4];

	cout &lt;&lt; &quot;started&quot; &lt;&lt; endl;

	sockaddr_in dest;
	sockaddr_in local;
	WSAData data;

	WSAStartup( MAKEWORD( 2, 2 ), &amp;data );

	local.sin_family = AF_INET;
	local.sin_addr.s_addr = inet_addr( &quot;192.168.0.20&quot; );
	local.sin_port = 0; // choose any

	dest.sin_family = AF_INET;
	dest.sin_addr.s_addr = inet_addr( &quot;192.168.0.100&quot; );
	dest.sin_port = htons( 85 );

	// create the socket
	SOCKET s = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
	// bind to the local address
	bind( s, (sockaddr *)&amp;local, sizeof(local) );

	// send the pkt
	while(fb.eof() == false)
	{
		for(int i = 0; i &lt; 40; i++)
		{
			if(fb.eof() == false)
			{
				buffer[i] = fb.get();
				//cout &lt;&lt; buffer[i];
			}
			else
				buffer[i] = 'x';
		}
		int ret = sendto(s, buffer, 40, 0, (sockaddr *)&amp;dest, sizeof(dest));
		if (ret != 0) 
		{
        printf(&quot;sendto failed with error %d\n&quot;, WSAGetLastError());
        //return 1;
		}

		while(re != &quot;next&quot;)
		{
			int rec = recvfrom(s, re, 4, 0, (sockaddr *)&amp;dest, (int *)sizeof(dest));

			if (rec != 0) 
			{
				printf(&quot;recvfrom failed with error %d\n&quot;, WSAGetLastError());
				//return 1;
			}
		}
		re[0] = 'a';
	}

	closesocket(s);
	WSACleanup();
	fb.close();
	cout &lt;&lt; &quot;finished&quot; &lt;&lt; endl;

	return 0;
}
</code></pre>
<p>MfG Testsocket</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052253</guid><dc:creator><![CDATA[Testsocket]]></dc:creator><pubDate>Wed, 20 Apr 2011 20:56:17 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit recvfrom; Fehler 10014 on Wed, 20 Apr 2011 21:07:56 GMT]]></title><description><![CDATA[<p>Wie wäre es mit Ports größer 1024 ? Schon mal von Port 0 gehört? und AF_INET bedeutet dass du TCP/IPv4 verwenden willst. Schau dir lieber erstmal ein Tutorial dazu an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052262</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Wed, 20 Apr 2011 21:07:56 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit recvfrom; Fehler 10014 on Wed, 20 Apr 2011 21:10:23 GMT]]></title><description><![CDATA[<p>AF_INET --&gt; The Internet Protocol version 4 (IPv4) address family.</p>
<p>Und wo genau steht hier geschrieben dass es dann nur TCP ist?</p>
<p>SOCK_DGRAM --&gt;<br />
A socket type that supports datagrams, which are connectionless, unreliable buffers of a fixed (typically small) maximum length. This socket type uses the User Datagram Protocol (UDP) for the Internet address family (<strong>AF_INET</strong> or AF_INET6).</p>
<p>Dort oben sollte eig 85 stehen, habe den Code vor der änderung kopiert.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052264</guid><dc:creator><![CDATA[Testsocket]]></dc:creator><pubDate>Wed, 20 Apr 2011 21:10:23 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit recvfrom; Fehler 10014 on Wed, 20 Apr 2011 21:12:18 GMT]]></title><description><![CDATA[<p>85 ist ein reservierter Port und 0 gibt es nicht du musst Ports außerhalb der Well-Known Ports verwenden. Hier ein tutorial: <a href="http://www.c-worker.ch/tuts/udp.php" rel="nofollow">http://www.c-worker.ch/tuts/udp.php</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052266</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Wed, 20 Apr 2011 21:12:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit recvfrom; Fehler 10014 on Wed, 20 Apr 2011 21:15:22 GMT]]></title><description><![CDATA[<p>Port 0 bedeutet, dass man vom Betriebsystem einen zugewiesen bekommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052269</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 20 Apr 2011 21:15:22 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit recvfrom; Fehler 10014 on Wed, 20 Apr 2011 21:20:02 GMT]]></title><description><![CDATA[<p>Und auch am Port 85 liegt es nicht.</p>
<p>Die Daten werden übermittelt, in beide Richtungen, egal welchen Port ich angebe.<br />
Nur werden sie eben nicht angenommen(vom Prog. selbst)</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052272</guid><dc:creator><![CDATA[Testsocket]]></dc:creator><pubDate>Wed, 20 Apr 2011 21:20:02 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit recvfrom; Fehler 10014 on Wed, 20 Apr 2011 21:28:33 GMT]]></title><description><![CDATA[<blockquote>
<p>Return Value</p>
<p>If no error occurs, recvfrom returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.</p>
</blockquote>
<p>Dein Test ist falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052275</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 20 Apr 2011 21:28:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit recvfrom; Fehler 10014 on Wed, 20 Apr 2011 22:24:06 GMT]]></title><description><![CDATA[<p>Da hast du recht, ja. Allerdings werden die Daten dennoch leider nicht richtig empfangen.</p>
<p>Danke jedenfalls!</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052295</guid><dc:creator><![CDATA[Testsocket]]></dc:creator><pubDate>Wed, 20 Apr 2011 22:24:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit recvfrom; Fehler 10014 on Wed, 20 Apr 2011 22:36:14 GMT]]></title><description><![CDATA[<p>Wie stellst du das fest? Der Test der while-Bedingung ist Müll! Man kann C-Strings nicht so vergleichen und die vom Socket gelesenen Daten sind noch nicht mal 0-terminiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052296</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 20 Apr 2011 22:36:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit recvfrom; Fehler 10014 on Thu, 21 Apr 2011 01:29:15 GMT]]></title><description><![CDATA[<p>Ach.. diesen Test meintest du, hab mich in der schnelle wohl vertan, danke..</p>
<p>Der Grund warum das ganze aber wirklich nicht funktionierte war folgender:</p>
<p>[cpp]int rec = recvfrom(s, re, 4, 0, (sockaddr *)&amp;dest, <strong>(int *)sizeof(dest)</strong>);[/cpp]</p>
<p>Ich habe das &amp;vor sizeof vergessen, dadurch gab's keine richtige Länge und dadurch keinen Empfang.</p>
<p>Danke an alle die mir geholfen haben.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052307</guid><dc:creator><![CDATA[Testsocket]]></dc:creator><pubDate>Thu, 21 Apr 2011 01:29:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit recvfrom; Fehler 10014 on Thu, 21 Apr 2011 16:59:58 GMT]]></title><description><![CDATA[<p>Testsocket schrieb:</p>
<blockquote>
<p>Ich habe das &amp;vor sizeof vergessen, dadurch gab's keine richtige Länge und dadurch keinen Empfang.</p>
</blockquote>
<p>Ich wußte gar nicht, daß man die Adresse eines sizeof()-Ausdrucks bestimmen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052616</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 21 Apr 2011 16:59:58 GMT</pubDate></item></channel></rss>