<?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[[gelöst] Client&#x2F;Server - Probleme mit recv()]]></title><description><![CDATA[<p>Hallo erstmal,<br />
ich beschäftige mich seit 2 Tagen mit der Netzwerkprogrammierung unter C/C++,<br />
bin in diesem Themenbereich also noch absoluter Neuling.<br />
Nachdem ich mich durch sämtliche Tutorials gewühlt habe, habe ich mich schließlich an ein eigenes Client-Server Projekt rangewagt - leider nur mit mäßigem Erfolg.<br />
Ich habe 2 Projekte angelegt: eins für den Klienten und eins für den Server.</p>
<pre><code class="language-cpp">//server.cpp
#include &lt;iostream&gt;
#include &lt;sqlite3.h&gt;
#include &lt;string&gt;
#include &lt;winsock2.h&gt;
using namespace std;

int main()
{
	WSADATA wsaData;
	int starterr = WSAStartup( MAKEWORD( 2,2 ), &amp;wsaData );
	if (starterr !=0)
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system (&quot;pause &gt;nul&quot;);
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;WSAStartup erfolgreich!&quot; &lt;&lt; endl;

	SOCKET server = socket( AF_INET,SOCK_STREAM,0 );
	if ( server == INVALID_SOCKET )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot; );
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;Socket erfolgreich erstellt!&quot; &lt;&lt; endl;

	sockaddr_in addr;
	addr.sin_port = htons(12345);
	addr.sin_addr.s_addr = INADDR_ANY;
	addr.sin_family = AF_INET;
	if ( bind ( server, ( sockaddr* )&amp;addr, sizeof( addr ) ) == SOCKET_ERROR )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot; );
		WSACleanup ();
		return 0;
	}
	cout &lt;&lt; &quot;Verbindung erfolgreich erstellt!&quot; &lt;&lt; endl;

	if ( listen( server,SOMAXCONN ) == SOCKET_ERROR )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system ( &quot;pause &gt;nul&quot; );
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;Socket für Verbindungen erfolgreich geöffnet!&quot; &lt;&lt; endl;
	while( listen( server, SOMAXCONN ) == SOCKET_ERROR );

	SOCKET client;

	client = accept( server,NULL,NULL );
	if ( client == INVALID_SOCKET )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot;);
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;Erfolgreich mit Clienten verbunden!&quot; &lt;&lt; endl;

	char buf[256] = &quot;Hello Client\n&quot;;
	send( server,buf,sizeof( buf ),0 );

	/////////////////////////////////////////////////////////////////////////////////
	/////////////////////////////////////////////////////////////////////////////////
	// Ab hier: Database Implementierung
	/////////////////////////////////////////////////////////////////////////////////
	/////////////////////////////////////////////////////////////////////////////////
	sqlite3* Database;
	string Path = &quot;C:\Users\Chrissi\Desktop\Programmieren\Projekte\Netzwerkprogrammierung\Server++\db.sql&quot;;

	if ( sqlite3_open( Path.c_str(), &amp;Database ) != SQLITE_OK )
	{
		cout &lt;&lt; &quot;Fehler beim Oeffnen: &quot; &lt;&lt; sqlite3_errmsg( Database ) &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot; );
		return 1;
	}
	cout &lt;&lt; &quot;Datenbank erfolgreich geöffnet!&quot; &lt;&lt; endl;

	sqlite3_close( Database );
	cout &lt;&lt; &quot;Datenbank geschlossen!&quot; &lt;&lt; endl;

	closesocket( server );
	closesocket( client );
	WSACleanup();

	system( &quot;PAUSE&quot; );
	return 0;

}
</code></pre>
<p>und hier der Klient:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;winsock2.h&gt;
using namespace std;

int main()
{
	WSADATA wsaData;
	int starterr = WSAStartup( MAKEWORD( 2,2 ),&amp;wsaData );
	if ( starterr != 0 )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot; );
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;WSAStartup erfolgreich!&quot; &lt;&lt; endl;

	SOCKET server = socket( AF_INET,SOCK_STREAM,0 );
	if ( server == INVALID_SOCKET )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot; );
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;Socket erfolgreich erstellt!&quot; &lt;&lt; endl;

	sockaddr_in addr;
	addr.sin_port = htons( 12345 );
	addr.sin_addr.s_addr = inet_addr( &quot;127.0.0.1&quot; );
	addr.sin_family = AF_INET;
	if ( connect( server,( sockaddr* )&amp;addr, sizeof( addr ) ) == SOCKET_ERROR )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot; );
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;Erfolgreich zum Socket verbunden!&quot; &lt;&lt; endl;

	char buf[256];
	int iBytes = recv( server, buf, 256,0 );
	cout &lt;&lt; &quot;Server sendet: &quot; &lt;&lt; iBytes &lt;&lt; &quot; Bytes&quot; &lt;&lt; endl;
	buf[iBytes] = '\0';
	for( int i = 0; i&lt;=iBytes;i++ )
	{
		cout &lt;&lt; &quot;Server sendet: &quot; &lt;&lt; buf[i] &lt;&lt; endl;
	}
	system( &quot;PAUSE&quot; );

	closesocket( server );
	WSACleanup();

	return 0;
}
</code></pre>
<p>Später sollte das eine Art Datenbankabfrage übers Netzwerk werden,<br />
daher die SQLite-Implementierung.</p>
<p>Leider sendet der Server meinem Klienten nur 0 Bytes,<br />
demnach nicht den String, den ich versendet habe.</p>
<p>Woran liegt das?</p>
<p>€: Da sucht man stundenlang und die Lösung ist vor der Nase,<br />
der Socket zum Empfangen war der Falsche &lt;.&gt;<br />
Sry ._.</p>
<p>Vielen Dank für Eure Hilfe im Voraus <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/topic/253276/gelöst-client-server-probleme-mit-recv</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 23:26:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253276.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 Oct 2009 21:59:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] Client&#x2F;Server - Probleme mit recv() on Fri, 30 Oct 2009 22:59:06 GMT]]></title><description><![CDATA[<p>Hallo erstmal,<br />
ich beschäftige mich seit 2 Tagen mit der Netzwerkprogrammierung unter C/C++,<br />
bin in diesem Themenbereich also noch absoluter Neuling.<br />
Nachdem ich mich durch sämtliche Tutorials gewühlt habe, habe ich mich schließlich an ein eigenes Client-Server Projekt rangewagt - leider nur mit mäßigem Erfolg.<br />
Ich habe 2 Projekte angelegt: eins für den Klienten und eins für den Server.</p>
<pre><code class="language-cpp">//server.cpp
#include &lt;iostream&gt;
#include &lt;sqlite3.h&gt;
#include &lt;string&gt;
#include &lt;winsock2.h&gt;
using namespace std;

int main()
{
	WSADATA wsaData;
	int starterr = WSAStartup( MAKEWORD( 2,2 ), &amp;wsaData );
	if (starterr !=0)
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system (&quot;pause &gt;nul&quot;);
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;WSAStartup erfolgreich!&quot; &lt;&lt; endl;

	SOCKET server = socket( AF_INET,SOCK_STREAM,0 );
	if ( server == INVALID_SOCKET )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot; );
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;Socket erfolgreich erstellt!&quot; &lt;&lt; endl;

	sockaddr_in addr;
	addr.sin_port = htons(12345);
	addr.sin_addr.s_addr = INADDR_ANY;
	addr.sin_family = AF_INET;
	if ( bind ( server, ( sockaddr* )&amp;addr, sizeof( addr ) ) == SOCKET_ERROR )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot; );
		WSACleanup ();
		return 0;
	}
	cout &lt;&lt; &quot;Verbindung erfolgreich erstellt!&quot; &lt;&lt; endl;

	if ( listen( server,SOMAXCONN ) == SOCKET_ERROR )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system ( &quot;pause &gt;nul&quot; );
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;Socket für Verbindungen erfolgreich geöffnet!&quot; &lt;&lt; endl;
	while( listen( server, SOMAXCONN ) == SOCKET_ERROR );

	SOCKET client;

	client = accept( server,NULL,NULL );
	if ( client == INVALID_SOCKET )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot;);
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;Erfolgreich mit Clienten verbunden!&quot; &lt;&lt; endl;

	char buf[256] = &quot;Hello Client\n&quot;;
	send( server,buf,sizeof( buf ),0 );

	/////////////////////////////////////////////////////////////////////////////////
	/////////////////////////////////////////////////////////////////////////////////
	// Ab hier: Database Implementierung
	/////////////////////////////////////////////////////////////////////////////////
	/////////////////////////////////////////////////////////////////////////////////
	sqlite3* Database;
	string Path = &quot;C:\Users\Chrissi\Desktop\Programmieren\Projekte\Netzwerkprogrammierung\Server++\db.sql&quot;;

	if ( sqlite3_open( Path.c_str(), &amp;Database ) != SQLITE_OK )
	{
		cout &lt;&lt; &quot;Fehler beim Oeffnen: &quot; &lt;&lt; sqlite3_errmsg( Database ) &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot; );
		return 1;
	}
	cout &lt;&lt; &quot;Datenbank erfolgreich geöffnet!&quot; &lt;&lt; endl;

	sqlite3_close( Database );
	cout &lt;&lt; &quot;Datenbank geschlossen!&quot; &lt;&lt; endl;

	closesocket( server );
	closesocket( client );
	WSACleanup();

	system( &quot;PAUSE&quot; );
	return 0;

}
</code></pre>
<p>und hier der Klient:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;winsock2.h&gt;
using namespace std;

int main()
{
	WSADATA wsaData;
	int starterr = WSAStartup( MAKEWORD( 2,2 ),&amp;wsaData );
	if ( starterr != 0 )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot; );
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;WSAStartup erfolgreich!&quot; &lt;&lt; endl;

	SOCKET server = socket( AF_INET,SOCK_STREAM,0 );
	if ( server == INVALID_SOCKET )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot; );
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;Socket erfolgreich erstellt!&quot; &lt;&lt; endl;

	sockaddr_in addr;
	addr.sin_port = htons( 12345 );
	addr.sin_addr.s_addr = inet_addr( &quot;127.0.0.1&quot; );
	addr.sin_family = AF_INET;
	if ( connect( server,( sockaddr* )&amp;addr, sizeof( addr ) ) == SOCKET_ERROR )
	{
		cout &lt;&lt; &quot;Fehler: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; &quot; aufgetreten!&quot; &lt;&lt; endl;
		system( &quot;pause &gt;nul&quot; );
		WSACleanup();
		return 0;
	}
	cout &lt;&lt; &quot;Erfolgreich zum Socket verbunden!&quot; &lt;&lt; endl;

	char buf[256];
	int iBytes = recv( server, buf, 256,0 );
	cout &lt;&lt; &quot;Server sendet: &quot; &lt;&lt; iBytes &lt;&lt; &quot; Bytes&quot; &lt;&lt; endl;
	buf[iBytes] = '\0';
	for( int i = 0; i&lt;=iBytes;i++ )
	{
		cout &lt;&lt; &quot;Server sendet: &quot; &lt;&lt; buf[i] &lt;&lt; endl;
	}
	system( &quot;PAUSE&quot; );

	closesocket( server );
	WSACleanup();

	return 0;
}
</code></pre>
<p>Später sollte das eine Art Datenbankabfrage übers Netzwerk werden,<br />
daher die SQLite-Implementierung.</p>
<p>Leider sendet der Server meinem Klienten nur 0 Bytes,<br />
demnach nicht den String, den ich versendet habe.</p>
<p>Woran liegt das?</p>
<p>€: Da sucht man stundenlang und die Lösung ist vor der Nase,<br />
der Socket zum Empfangen war der Falsche &lt;.&gt;<br />
Sry ._.</p>
<p>Vielen Dank für Eure Hilfe im Voraus <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/1801005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801005</guid><dc:creator><![CDATA[PR0S3V3N]]></dc:creator><pubDate>Fri, 30 Oct 2009 22:59:06 GMT</pubDate></item></channel></rss>