<?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 Chat]]></title><description><![CDATA[<p>Hallo,<br />
habe folgendes Problem. Die Verbindung des Sockets funktioniert nur läuft das recv in einer Dauerschleife, empfängt aber nicht was ich beim sender eingebe. Ich würde gerne alles abbilden nur das geht leider nicht ich vermute, weil es dan zu lang ist.</p>
<pre><code class="language-cpp">DWORD WINAPI ThreadProc( LPVOID lpParam ){

SOCKET usocket = (SOCKET)lpParam;
cout &lt;&lt; &quot;cast&quot; &lt;&lt; endl;
while(true){

nByte = recv(usocket,buffer,buffer_size,0);
cout &lt;&lt; &quot;recv&quot; &lt;&lt; endl;

	// Ausgaben wenn etwas empfangen wurde
	if(nByte &gt; 0){

		// Am ende die Null anhängen, da sonst mist ausgegeben wird
		// WICHTIG strlen missachtet die \0 !!!
		//buffer[nByte] = 0;

		// Textfarbe mit der Konsolenklasse auf rot setzen
		con.setTextColor(FG_RED);
		// Ausgabe der IP und Portnummer
		cout &lt;&lt; inet_ntoa(sender.sin_addr) &lt;&lt; &quot;:&quot; &lt;&lt; ntohs(sender.sin_port) &lt;&lt; endl;
		// Ausgabe der IP und Portnummer in eine datei
		Datei &lt;&lt; inet_ntoa(sender.sin_addr) &lt;&lt; &quot;:&quot; &lt;&lt; ntohs(sender.sin_port) &lt;&lt; endl;
		// Ausgabe der übertragennen Daten
		cout &lt;&lt; buffer &lt;&lt; endl;
		// Ausgabe der übertragennen Daten in eine datei
		Datei &lt;&lt; buffer &lt;&lt; endl;
	}
// Wenn das Event gesetzt wird, verlasse die Schleife
if (WaitForSingleObject(hEvent, 0) == WAIT_OBJECT_0) break;
}
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/199301/tcp-chat</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 21:58:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199301.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 Nov 2007 23:16:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TCP Chat on Fri, 30 Nov 2007 23:16:52 GMT]]></title><description><![CDATA[<p>Hallo,<br />
habe folgendes Problem. Die Verbindung des Sockets funktioniert nur läuft das recv in einer Dauerschleife, empfängt aber nicht was ich beim sender eingebe. Ich würde gerne alles abbilden nur das geht leider nicht ich vermute, weil es dan zu lang ist.</p>
<pre><code class="language-cpp">DWORD WINAPI ThreadProc( LPVOID lpParam ){

SOCKET usocket = (SOCKET)lpParam;
cout &lt;&lt; &quot;cast&quot; &lt;&lt; endl;
while(true){

nByte = recv(usocket,buffer,buffer_size,0);
cout &lt;&lt; &quot;recv&quot; &lt;&lt; endl;

	// Ausgaben wenn etwas empfangen wurde
	if(nByte &gt; 0){

		// Am ende die Null anhängen, da sonst mist ausgegeben wird
		// WICHTIG strlen missachtet die \0 !!!
		//buffer[nByte] = 0;

		// Textfarbe mit der Konsolenklasse auf rot setzen
		con.setTextColor(FG_RED);
		// Ausgabe der IP und Portnummer
		cout &lt;&lt; inet_ntoa(sender.sin_addr) &lt;&lt; &quot;:&quot; &lt;&lt; ntohs(sender.sin_port) &lt;&lt; endl;
		// Ausgabe der IP und Portnummer in eine datei
		Datei &lt;&lt; inet_ntoa(sender.sin_addr) &lt;&lt; &quot;:&quot; &lt;&lt; ntohs(sender.sin_port) &lt;&lt; endl;
		// Ausgabe der übertragennen Daten
		cout &lt;&lt; buffer &lt;&lt; endl;
		// Ausgabe der übertragennen Daten in eine datei
		Datei &lt;&lt; buffer &lt;&lt; endl;
	}
// Wenn das Event gesetzt wird, verlasse die Schleife
if (WaitForSingleObject(hEvent, 0) == WAIT_OBJECT_0) break;
}
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1413195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413195</guid><dc:creator><![CDATA[Mitbewohner]]></dc:creator><pubDate>Fri, 30 Nov 2007 23:16:52 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Fri, 30 Nov 2007 23:18:41 GMT]]></title><description><![CDATA[<p>Hier der Versuch den rest des empfängers zu zeigen</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;stdio.h&gt;
#include &lt;winsock2.h&gt;
#include &lt;iostream&gt;
#include &lt;conio.h&gt;
#include &lt;string&gt;
#include &quot;ic.hpp&quot;
using namespace std;
// Namespace der Konsolenklasse zugänglich machen
using namespace ic;

SOCKET hSock; // socket handle created
SOCKADDR_IN sender; // socket address of sender
int dwSenderSize; // size of socket address of sender
SOCKADDR_IN local; // local address

char buffer[1000]; // Empfangspuffer
string buffer_senden;
int buffer_size = 1000; // Grösse des Empfangspuffers
// int buffer_size = 1000;
int nRet; // Returncode
int nByte; // Anzahl empfangener Bytes
int bRet(0);
// Handle für den Thread
HANDLE hThread;
DWORD dwThreadId;
// Hande für das Event
HANDLE hEvent;
// Stream für die Dateiausgabe
ofstream Datei;
SOCKET hClSock; // client socket handle returned form accept()
int sendersize = sizeof(sender);

WSADATA stWSAData; // returned from WSAStartup
WORD wVersionRequested; // requested WInsock Version

DWORD WINAPI ThreadProc( LPVOID lpParam ){

SOCKET usocket = (SOCKET)lpParam;
cout &lt;&lt; &quot;cast&quot; &lt;&lt; endl;
while(true){

nByte = recv(usocket,buffer,buffer_size,0);
cout &lt;&lt; &quot;recv&quot; &lt;&lt; endl;

	// Ausgaben wenn etwas empfangen wurde
	if(nByte &gt; 0){

		// Am ende die Null anhängen, da sonst mist ausgegeben wird
		// WICHTIG strlen missachtet die \0 !!!
		//buffer[nByte] = 0;

		// Textfarbe mit der Konsolenklasse auf rot setzen
		con.setTextColor(FG_RED);
		// Ausgabe der IP und Portnummer
		cout &lt;&lt; inet_ntoa(sender.sin_addr) &lt;&lt; &quot;:&quot; &lt;&lt; ntohs(sender.sin_port) &lt;&lt; endl;
		// Ausgabe der IP und Portnummer in eine datei
		Datei &lt;&lt; inet_ntoa(sender.sin_addr) &lt;&lt; &quot;:&quot; &lt;&lt; ntohs(sender.sin_port) &lt;&lt; endl;
		// Ausgabe der übertragennen Daten
		cout &lt;&lt; buffer &lt;&lt; endl;
		// Ausgabe der übertragennen Daten in eine datei
		Datei &lt;&lt; buffer &lt;&lt; endl;
	}
// Wenn das Event gesetzt wird, verlasse die Schleife
if (WaitForSingleObject(hEvent, 0) == WAIT_OBJECT_0) break;
}
return 0;
}

int main(){
// --- Winsock initialisieren ---------
wVersionRequested = MAKEWORD( 2, 0 ); // Version 2.0
nRet = WSAStartup(wVersionRequested,&amp;stWSAData);
// Fehlerabfrage
if(nRet &lt; 0){
	cout &lt;&lt; &quot;Fehler bei WSAStartup&quot;;
}

con.setTitle(TEXT(&quot;UDP Chat&quot;));
// --- Wer bin ich ? ------------------
cout &lt;&lt; &quot;UDP Empfaenger ...&quot; &lt;&lt; endl &lt;&lt; &quot;Beenden durch Eingabe von exit&quot; &lt;&lt; endl;

// --- Socket erzeugen ----------------
hSock = socket(AF_INET,SOCK_STREAM,0);

// --- Socket binden ------------------
local.sin_family = PF_INET;
local.sin_port = htons((short)4712); // meine Portnummer
local.sin_addr.s_addr = htonl(INADDR_ANY); // IP Adresse des ersten Interfaces
bRet = bind(hSock,(SOCKADDR *)&amp;local,sizeof(local)) ;
// Fehlerabfrage
if(bRet == SOCKET_ERROR) cout &lt;&lt; WSAGetLastError() ;

// Datei angeben und mit rechten versehen
Datei.open(&quot;Verlauf_empfaenger.txt&quot;, ios_base::out | ios::app);

// Event erzeugen
hEvent = CreateEvent( 
    0,         // default security attributes
    TRUE,         // manual-reset event
    0,         // initial state is non signaled
    0  // object name
    );

//nRet = connect(hSock,(LPSOCKADDR)&amp;sender,sizeof(sender));
//if(SOCKET_ERROR == nRet) cout &lt;&lt; ::WSAGetLastError();

// ---- set listen mode ------------------------
nRet = listen(hSock,SOMAXCONN);
if(SOCKET_ERROR == nRet) cout &lt;&lt; ::WSAGetLastError();
cout &lt;&lt; &quot;listenmode&quot; &lt;&lt; endl;

	// --- accept connection -----------------------
hClSock = accept(hSock,(SOCKADDR *)&amp;sender,&amp;sendersize);
if(SOCKET_ERROR == hClSock) cout &lt;&lt; ::WSAGetLastError();
cout &lt;&lt; &quot;accept&quot; &lt;&lt; endl;

// Emfangs Thread erzeugen
hThread = CreateThread( 
            NULL,              // default security attributes
            0,                 // use default stack size  
            ThreadProc,        // thread function 
            &amp;hClSock,             // argument to thread function 
            0,                 // use default creation flags 
            &amp;dwThreadId);   // returns the thread identifier

// --- Verbindung schliessen ----------
nRet = shutdown(hSock,SD_BOTH);

// --- Socket schliessen --------------
nRet = closesocket(hSock);

// --- Winsock deinitialisieren -------
nRet = WSACleanup();

// Unendlich Warten bis der Thread ordnungsgemaes beendet wurde
WaitForSingleObject(hThread, INFINITE);

// Dateistream schließen
Datei.close();
_getch();
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1413196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413196</guid><dc:creator><![CDATA[Mitbewohner]]></dc:creator><pubDate>Fri, 30 Nov 2007 23:18:41 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Sat, 01 Dec 2007 00:09:42 GMT]]></title><description><![CDATA[<p>Ich hab mir jetzt nicht alles detailliert durchgeschaut, aber dir ist schon klar, dass nach dem Senden von n Bytes dein recv nicht unbedingt wieder n Bytes zurückmeldet, sondern die Daten auch stückchenweise empfangen kann (ist oft so)?<br />
Guck mal hier im Forum nach anderen tcp-threads, das Problem gabs schon öfters <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/1413210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413210</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 01 Dec 2007 00:09:42 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Sat, 01 Dec 2007 00:33:37 GMT]]></title><description><![CDATA[<p>Ja das das ganze gestückelt sein kann weis ich, deswegen hab ich es ja auch in eine while-Schleife gesetzt...<br />
Er erzeugt jetzt 100% CPU Auslastung mit der Empfangsschleife, irgendwas is da flasch <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/1413214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413214</guid><dc:creator><![CDATA[Mitbewohner]]></dc:creator><pubDate>Sat, 01 Dec 2007 00:33:37 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Sat, 01 Dec 2007 09:57:51 GMT]]></title><description><![CDATA[<p>[quote=&quot;Mitbewohner&quot;Er erzeugt jetzt 100% CPU Auslastung mit der Empfangsschleife, irgendwas is da flasch :D[/quote]<br />
hehe, ich glaube mit der recv-Empfangsschleife hat jeder erstmal Probleme <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="😉"
    /> Guck mal <a href="http://www.c-plusplus.net/forum/search-var-mode-is-results.html" rel="nofollow">hier</a>, da dürfte das richtige zu finden sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413265</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 01 Dec 2007 09:57:51 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Sat, 01 Dec 2007 10:08:33 GMT]]></title><description><![CDATA[<p>Ich kenn mich mit UDP nicht so aus, aber evtl. arbeitet dein Socket im Non-Blocking-Modus, d.h. wenn nichts da ist, wird 0 zurückgegeben.</p>
<p>Probier mal:</p>
<pre><code class="language-cpp">if(nByte &gt; 0){

}
else
  Sleep(1);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1413268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413268</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Sat, 01 Dec 2007 10:08:33 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Sat, 01 Dec 2007 12:21:26 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-2.html" rel="nofollow">Marc++us</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-4.html" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413317</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sat, 01 Dec 2007 12:21:26 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Sat, 01 Dec 2007 14:00:39 GMT]]></title><description><![CDATA[<p>verrate mir mal WANN bei dir das break in deiner While(true) aufgerufen wird .... du hast das event zwar erzeugt aber es wird nie bedient ...</p>
<p>mal abgesehen davon, dein recv liefert entweder anzahl bytes oder 0 wenn verbindung getrennt oder -1 wenn fehler .... du solltest mal ne fehlerkontrolle einbauen und nicht einfach davon ausgehen das die verbindung schon irgendwie hinhaut.</p>
<p>könntest du eventuell auch ein paar auszuüge aus dem client servieren ? weil das scheint nur der server zu sein oder irre ich mich ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413359</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Sat, 01 Dec 2007 14:00:39 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Sat, 01 Dec 2007 16:59:19 GMT]]></title><description><![CDATA[<p>Ceos schrieb:</p>
<blockquote>
<p>verrate mir mal WANN bei dir das break in deiner While(true) aufgerufen wird .... du hast das event zwar erzeugt aber es wird nie bedient ...</p>
<p>mal abgesehen davon, dein recv liefert entweder anzahl bytes oder 0 wenn verbindung getrennt oder -1 wenn fehler .... du solltest mal ne fehlerkontrolle einbauen und nicht einfach davon ausgehen das die verbindung schon irgendwie hinhaut.</p>
<p>könntest du eventuell auch ein paar auszuüge aus dem client servieren ? weil das scheint nur der server zu sein oder irre ich mich ?</p>
</blockquote>
<p>Ein chat hat ja die Eigenschaft in zwei Richtungen zu funktionieren, da es nicht geklappt hat, probiere ich jetzt erst mal die eine Richtung. Das event wird gesetzt wenn man exit eingibt. Eine Eingabe beim Empfänger gibt es aber halt noch nicht bzw. ich hab sie wieder raus genommen.<br />
Anbei der Sender, der auch das mit dem exit zeigt.</p>
<p>sender</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;winsock2.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;conio.h&gt;
#include &lt;fstream&gt;
#include &quot;ic.hpp&quot;
using namespace std;
// Namespace der Konsolenklasse zugänglich machen
using namespace ic;

// --- Initialisierungen --------------
WSADATA stWSAData; // returned from WSAStartup
WORD wVersionRequested; // requested WInsock Version
SOCKET hSock; // socket handle created
SOCKADDR_IN receiver; // socket address of receiver
SOCKADDR_IN local; // local socket address
int bRet(0);

// char *buffer = &quot;Hallo Welt&quot;; // Testdata
string buffer;
// int buffer_size = strlen(buffer); // Size of Testdata
int nRet; // Returncode
HANDLE hThread;
DWORD dwThreadId;
char buffer_empfangen[1000]; // Empfangspuffer
int buffer_size = 1000; // Grösse des Empfangspuffers
int dwSenderSize; // size of socket address of sender
int nByte; // Anzahl empfangener Bytes
// CRITICAL_SECTION CS;
// Hande für das Event
HANDLE hEvent;
// Stream für die Dateiausgabe
ofstream Datei;
SOCKET hClSock; // client socket handle returned form accept()

DWORD WINAPI ThreadProc( LPVOID lpParam ){
// --- Daten empfangen ----------------

while(true){
// ---- set listen mode ------------------------
nRet = listen(hSock,SOMAXCONN);

// --- accept connection -----------------------
hClSock = accept(hSock,(SOCKADDR *)&amp;receiver,(int*)sizeof(receiver));

// --- receive some Bytes blocking ! ----------
nByte = recv(hClSock,buffer_empfangen,buffer_size,0);
	// Ausgaben
	if(nByte &gt; 0){

		// Am ende die Null anhängen, da sonst mist ausgegeben wird
		// WICHTIG strlen missachtet die \0 !!!
		//buffer_empfangen[nByte] = 0;

		// Textfarbe mit der Konsolenklasse auf rot setzen
		con.setTextColor(FG_RED);
		// Ausgabe der IP und Portnummer
		cout &lt;&lt; inet_ntoa(receiver.sin_addr) &lt;&lt; &quot;:&quot; &lt;&lt; ntohs(receiver.sin_port) &lt;&lt; endl;
		// In Datei schreiben
		Datei &lt;&lt; inet_ntoa(receiver.sin_addr) &lt;&lt; &quot;:&quot; &lt;&lt; ntohs(receiver.sin_port) &lt;&lt; endl;
		// Ausgabe der übertragennen Daten
		cout &lt;&lt; buffer_empfangen &lt;&lt; endl;
		// In Datei schreiben
		Datei &lt;&lt; buffer_empfangen &lt;&lt; endl;
	}
	// Wenn das Event gesetzt wird, verlasse die Schleife
	if (WaitForSingleObject(hEvent, 0) == WAIT_OBJECT_0) break;
}
return 0;
}

int main(){

con.setTitle(TEXT(&quot;UDP Chat&quot;));
// --- Wer bin ich ? ------------------
cout &lt;&lt; &quot;UDP Sender ...&quot; &lt;&lt; endl &lt;&lt; &quot;Beenden durch Eingabe von exit&quot; &lt;&lt; endl;

// --- Winsock initialisieren ---------
wVersionRequested = MAKEWORD( 2, 0 ); // Version 2.0
nRet = WSAStartup(wVersionRequested,&amp;stWSAData);
// Fehlerabfrage
if(nRet &lt; 0){
	cout &lt;&lt; &quot;Fehler bei WSAStartup&quot;;
}

// --- Socket erzeugen ----------------
hSock = socket(AF_INET,SOCK_STREAM,0);
	if(INVALID_SOCKET == hSock){
		return 1;
	}

// --- Socket binden ------------------
local.sin_family = PF_INET;
local.sin_port = htons((short)4711); // meine Portnummer
local.sin_addr.s_addr = inet_addr(&quot;127.0.0.1&quot;); // meine IP Adresse
bRet = bind(hSock,(SOCKADDR *)&amp;local,sizeof(local));
// Fehlerabfrage
if(bRet == SOCKET_ERROR) cout &lt;&lt; ::WSAGetLastError();

// --- Zieladresse setzen -------------
receiver.sin_family = PF_INET;
receiver.sin_port = htons((short)4712); // Zielport
// receiver.sin_addr.s_addr = inet_addr(&quot;127.0.0.1&quot;); // Ziel IP Adresse
receiver.sin_addr.s_addr = inet_addr(&quot;127.0.0.1&quot;); // Ziel IP Adresse

Datei.open(&quot;Verlauf_sender.txt&quot;, ios_base::out | ios::app);

// Event erzeugen
hEvent = CreateEvent( 
    0,         // default security attributes
    TRUE,         // manual-reset event
    0,         // initial state is non signaled
    0  // object name
    );

nRet = connect(hSock,(SOCKADDR *)&amp;receiver,sizeof(receiver));
if(SOCKET_ERROR == nRet) cout &lt;&lt; ::WSAGetLastError();
cout &lt;&lt; &quot;connected&quot; &lt;&lt; endl;

// Thread erzeugen
//hThread = CreateThread( 
//            NULL,              // default security attributes
//            0,                 // use default stack size  
//            ThreadProc,        // thread function 
//            0,             // argument to thread function 
//            0,                 // use default creation flags 
//            &amp;dwThreadId);   // returns the thread identifier

while(true){
	// Tesxtfarbe auf blau setzen
	con.setTextColor(FG_BLUE);
	// eine gnaze Zeile einlesen
	getline(cin, buffer);
	// Wenn exit eingegeben wird, beende die Eingabe und setze das Event
	if(!strcmp(buffer.c_str(), &quot;exit&quot;)){
		SetEvent(hEvent);
		buffer = &quot;Partner hat den Chat verlassen&quot;;
		Datei &lt;&lt; buffer &lt;&lt; endl;
		while(!(nRet = send(hSock,&amp;buffer[0],buffer.length(),0)));
		break;
	}
	Datei &lt;&lt; buffer &lt;&lt; endl;
	cout &lt;&lt; &quot;Daten senden&quot; &lt;&lt; endl;
	// --- Daten senden -------------------
	while(!(nRet = send(hSock,&amp;buffer[0],buffer.length(),0)));
}

// --- Verbindung schliessen ----------
nRet = shutdown(hSock,SD_BOTH);

//DeleteCriticalSection(&amp;CS);
// --- Socket schliessen --------------
nRet = closesocket(hSock);

// --- Winsock deinitialisieren -------
nRet = WSACleanup();

// --- Winsock deinitialisieren -------
nRet = WSACleanup();

// Unendlich Warten bis der Thread ordnungsgemaes beendet wurde
WaitForSingleObject(hThread, INFINITE);

// Dateistream schließen
Datei.close();

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1413450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413450</guid><dc:creator><![CDATA[Mitbewohner]]></dc:creator><pubDate>Sat, 01 Dec 2007 16:59:19 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Sat, 01 Dec 2007 17:13:16 GMT]]></title><description><![CDATA[<p>Ceos schrieb:</p>
<blockquote>
<p>mal abgesehen davon, dein recv liefert entweder anzahl bytes oder 0 wenn verbindung getrennt oder -1 wenn fehler .... du solltest mal ne fehlerkontrolle einbauen und nicht einfach davon ausgehen das die verbindung schon irgendwie hinhaut.</p>
</blockquote>
<p>Hab jetzt sowas stehen</p>
<pre><code class="language-cpp">nByte = recv(usocket,buffer,buffer_size,0);
if(nByte &lt; 0) cout &lt;&lt; WSAGetLastError() ;
</code></pre>
<p>Ich bekomme den Fehler 10093.<br />
Im help steht:</p>
<blockquote>
<p>Successful WSAStartup not yet performed.<br />
Either the application has not called WSAStartup or WSAStartup failed. The application may be accessing a socket that the current active task does not own (that is, trying to share a socket between tasks), or WSACleanup has been called too many times.</p>
</blockquote>
<p>Das scheint es zu sein was Probleme macht... und jetzt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413457</guid><dc:creator><![CDATA[Mitbewohner]]></dc:creator><pubDate>Sat, 01 Dec 2007 17:13:16 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Sat, 01 Dec 2007 17:50:25 GMT]]></title><description><![CDATA[<p>Du musst am Anfang deines Programms noch &quot;WSAStartup()&quot; aufrufen! Am Ende dann auch irgendwas zum aufräumen, bin mir aber nicht mehr sicher, evtl WSACleanUp, müsstest du aber auch bei der MSDN-Referenz zu WSAStartup finden <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/1413470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413470</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 01 Dec 2007 17:50:25 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Sat, 01 Dec 2007 18:03:37 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Du musst am Anfang deines Programms noch &quot;WSAStartup()&quot; aufrufen! Am Ende dann auch irgendwas zum aufräumen, bin mir aber nicht mehr sicher, evtl WSACleanUp, müsstest du aber auch bei der MSDN-Referenz zu WSAStartup finden <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>
</blockquote>
<p>Das hab ich aber in der main, das recv is ja oben drüber, vielleicht &quot;findet&quot; er deshalb das WSAStartup nicht.</p>
<p>Wenn ich WSAStartup über den ThreadProc setze gibt er mir einen haufen Fehler, ich denke das muss in der main sein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413480</guid><dc:creator><![CDATA[Mitbewohner]]></dc:creator><pubDate>Sat, 01 Dec 2007 18:03:37 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Sat, 01 Dec 2007 18:51:25 GMT]]></title><description><![CDATA[<p>Oh, stimmt, entschuldige! Aber ich glaub ich habs: In deiner main rufst du WSACleanUp auf und <em>dann</em> wartest du auf die anderen Threads, heißt es wird aufgeräumt während die anderen Threads noch laufen. Mach das Cleanup einfach nach dem WaitForSingleObject.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413501</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 01 Dec 2007 18:51:25 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Sat, 01 Dec 2007 22:53:13 GMT]]></title><description><![CDATA[<p>Hey der Fehler ist weg, dafür hab ich jetzt folgenden bei recv:</p>
<blockquote>
<p>10038:<br />
Socket operation on nonsocket.<br />
An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1413625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413625</guid><dc:creator><![CDATA[Mitbewohner]]></dc:creator><pubDate>Sat, 01 Dec 2007 22:53:13 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Sat, 01 Dec 2007 23:41:50 GMT]]></title><description><![CDATA[<p>Falls der gepostete Code noch aktuell ist, dann gehört shutdown () und closesocket () auch noch hinter WaitForSingleObject () und vor WSACleanup ().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413635</guid><dc:creator><![CDATA[sockelmeister]]></dc:creator><pubDate>Sat, 01 Dec 2007 23:41:50 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Tue, 04 Dec 2007 10:59:28 GMT]]></title><description><![CDATA[<p>Habs gelößt, war einiges falsch <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>
<p>Danke an alle! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414704</guid><dc:creator><![CDATA[Mitbewohner]]></dc:creator><pubDate>Tue, 04 Dec 2007 10:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Tue, 04 Dec 2007 11:23:11 GMT]]></title><description><![CDATA[<p>werte den fehler bei deinem wsastartup doche einfach mal aus</p>
<pre><code class="language-cpp">nRet = WSAStartup(wVersionRequested,&amp;stWSAData);
// Fehlerabfrage
if(nRet &lt; 0){
    cout &lt;&lt; &quot;Fehler bei WSAStartup&quot;;
    cout &lt;&lt; WSAGetLastError(); //&lt;----- so oder so ähnlich
}
</code></pre>
<p>EDIT: O_o ups da war ja noch ne seite 2 bei dem topic ... DAMN</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414710</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 04 Dec 2007 11:23:11 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Tue, 04 Dec 2007 11:52:01 GMT]]></title><description><![CDATA[<p>MSDN:</p>
<blockquote>
<p>If successful, the WSAStartup function returns zero. Otherwise, it returns one of the error codes listed below.</p>
<p>The WSAStartup function directly returns the extended error code in the return value for this function. A call to the WSAGetLastError function is not needed and should not be used.</p>
</blockquote>
<p>-&gt; WSAGetLastError() sollte nicht benutzt werden bei WSAStartup(..).</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414730</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Tue, 04 Dec 2007 11:52:01 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Chat on Tue, 04 Dec 2007 12:02:47 GMT]]></title><description><![CDATA[<p>doppel autsch .... hast ja recht ... mittlerweilen kopier ich teile meines code nur noch, btw. hab mit ne tool lib angelegt und ruf einfach nur noch initWSA(); auf &gt;_&lt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414741</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 04 Dec 2007 12:02:47 GMT</pubDate></item></channel></rss>