<?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[recv funktioniert nicht]]></title><description><![CDATA[<p>Ich versuche einen kleinen IRC Client zu programmieren.<br />
Z.Z. kann man mit dem Programm eine Verbindung zum EFnet aufbauen.<br />
Der Nick wird automatisch übertragen.<br />
Danach kommt die MOTD vom Server.<br />
Den Rest sollte man dann selbst eingeben können, wie mit Telnet eben.<br />
Jedoch empfängt recv nach der MOTD nichts mehr!<br />
Es werden aber tatsächlich Daten empfangen.<br />
Bitte helft mir da raus, ich habe schon seit Studenen keine Ideen mehr.</p>
<pre><code class="language-cpp">#include &lt;winsock2.h&gt;
#include &lt;windows.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;iostream&gt;
using namespace std;
#define MBOX(x,y) MessageBox(NULL,x,y,MB_OK)

SOCKET sock;

long WINAPI GetData(long lParam)
{
	WSABUF *wbuf = new WSABUF;
	wbuf-&gt;buf=new char[255];
	wbuf-&gt;len=254;
	char test[255];
	DWORD dwFlags =0, dwBytesRet = 0;
	fd_set st;
	st.fd_array[0]=sock;
	st.fd_count=1;
	timeval time;
	time.tv_sec = 2;
	time.tv_usec = 0;
	int s=0;
	while(true)
	{
		ZeroMemory(wbuf-&gt;buf,sizeof(wbuf-&gt;buf));
		ZeroMemory(test,sizeof(test));
		dwFlags = 0;

			//if(WSARecv(sock,wbuf,1,&amp;dwBytesRet,&amp;dwFlags,NULL,NULL)!=0)
			if(SOCKET_ERROR==recv(sock,test,254,NULL))
			{	
				if(WSAGetLastError()!=10035)
				{
					char buf[200];
					sprintf(buf,&quot;WSARecv failed. Code %d&quot;,WSAGetLastError(),sock);
					MessageBox(NULL,buf,&quot;Alert!&quot;,MB_OK);
					WSACleanup();
					return 0;
				}
				MBOX(&quot;Would block&quot;,&quot;YEA&quot;);
			}
			MBOX(&quot;Recv&quot;,&quot;YEA&quot;);
			//_snprintf(test,dwBytesRet,wbuf-&gt;buf);
			printf(&quot;%s&quot;,test);

	}

	return lParam;
}

int main()
{
	WSADATA wsd;
	DWORD dwBytesRet=0, dwFlags=0;
	WSABUF *wbuf = new WSABUF;
	wbuf-&gt;buf=new char[255];
	SOCKADDR_IN adr;
	in_addr ad;

	adr.sin_addr.s_addr = inet_addr(&quot;80.240.238.17&quot;);
	adr.sin_family = AF_INET;
	adr.sin_port = htons(6667);
	char test[255];
	sprintf(test,&quot;sin_family: %d sin_addr: %d sin_port: %d sin_zero: %s&quot;,adr.sin_family,adr.sin_addr,adr.sin_port,adr.sin_zero);

	int err=0;

	err=WSAStartup(MAKEWORD(2,2),&amp;wsd);
	if (err!=0)
	{
		MessageBox(NULL, &quot;WSAStartup failed!&quot;,&quot;ERROR&quot;,MB_OK);
		return 0;
	}

	printf(&quot;Startup successful\n&quot;);

	sock= WSASocket(AF_INET, SOCK_STREAM, IPPROTO_IP, NULL, 0,WSA_FLAG_OVERLAPPED);

	//sock=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);
	if(sock==INVALID_SOCKET) 
	{

		MessageBox(NULL,&quot;Creation of Socket failed&quot;,&quot;ERROR&quot;,MB_OK);
		WSACleanup();
        return 0;
    }

	printf(&quot;Socket created\n&quot;);	

	if(WSAConnect(sock,(sockaddr*)&amp;adr,sizeof(sockaddr),NULL,NULL,NULL,NULL)==SOCKET_ERROR) 
	{

		char buf[200];
		sprintf(buf,&quot;Bind call failed!. Code %d&quot;,WSAGetLastError(),sock);
		MessageBox(NULL,buf,&quot;Alert!&quot;,MB_OK);
		WSACleanup();
        return 0;
    }

	printf(&quot;Connected\n&quot;);
	/*ULONG  NonBlock = 1;
    if (ioctlsocket(sock, FIONBIO, &amp;NonBlock) == SOCKET_ERROR)
    {
         printf(&quot;ioctlsocket() failed \n&quot;);
         return 0;
    }*/

	sprintf(wbuf-&gt;buf,&quot;NICK Trogdor\n&quot;);
	wbuf-&gt;len=strlen(wbuf-&gt;buf);
    if(SOCKET_ERROR==WSASend(sock,wbuf,1,&amp;dwBytesRet,dwFlags,NULL,NULL))
	//if(SOCKET_ERROR==recv(sock,test,255,0))
	{

		char buf[200];
		sprintf(buf,&quot;WSARecv failed. Code %d&quot;,WSAGetLastError(),sock);
		MessageBox(NULL,buf,&quot;Alert!&quot;,MB_OK);
		WSACleanup();
		return 0;
	}

	sprintf(wbuf-&gt;buf,&quot;USER Trogdor 0 * TR\n&quot;);
	wbuf-&gt;len=strlen(wbuf-&gt;buf);
    if(SOCKET_ERROR==WSASend(sock,wbuf,1,&amp;dwBytesRet,dwFlags,NULL,NULL))
	//if(SOCKET_ERROR==recv(sock,test,255,0))
	{

		char buf[200];
		sprintf(buf,&quot;WSARecv failed. Code %d&quot;,WSAGetLastError(),sock);
		MessageBox(NULL,buf,&quot;Alert!&quot;,MB_OK);
		WSACleanup();
		return 0;
	}

	fd_set st;
	st.fd_array[0]=sock;
	st.fd_count=1;
	timeval time;
	time.tv_sec = 2;
	time.tv_usec = 0;
	WSAEVENT ev = WSACreateEvent();
	int s=0;
	HANDLE hThread;
	DWORD dwID = 100;
	hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)GetData,NULL,0,NULL);

	while(true)
	{

		ZeroMemory(test,sizeof(test));
		ZeroMemory(wbuf-&gt;buf,sizeof(wbuf-&gt;buf));
		sprintf(wbuf-&gt;buf,&quot;JOIN #pot&quot;);
		wbuf-&gt;len=strlen(wbuf-&gt;buf);
		//sprintf(wbuf-&gt;buf,test);

			//if(SOCKET_ERROR==WSASend(sock,wbuf,1,&amp;dwBytesRet,dwFlags,NULL,NULL))
			if(SOCKET_ERROR==send(sock,wbuf-&gt;buf,wbuf-&gt;len,0))
			{	
				char buf[200];
				sprintf(buf,&quot;WSARecv failed. Code %d&quot;,WSAGetLastError(),sock);
				MessageBox(NULL,buf,&quot;Alert!&quot;,MB_OK);
				WSACleanup();
				return 0;
			}
		MBOX(wbuf-&gt;buf,&quot;!&quot;);
	}

	WSACleanup();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/117418/recv-funktioniert-nicht</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 13:22:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/117418.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 07 Aug 2005 12:31:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to recv funktioniert nicht on Sun, 07 Aug 2005 12:31:51 GMT]]></title><description><![CDATA[<p>Ich versuche einen kleinen IRC Client zu programmieren.<br />
Z.Z. kann man mit dem Programm eine Verbindung zum EFnet aufbauen.<br />
Der Nick wird automatisch übertragen.<br />
Danach kommt die MOTD vom Server.<br />
Den Rest sollte man dann selbst eingeben können, wie mit Telnet eben.<br />
Jedoch empfängt recv nach der MOTD nichts mehr!<br />
Es werden aber tatsächlich Daten empfangen.<br />
Bitte helft mir da raus, ich habe schon seit Studenen keine Ideen mehr.</p>
<pre><code class="language-cpp">#include &lt;winsock2.h&gt;
#include &lt;windows.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;iostream&gt;
using namespace std;
#define MBOX(x,y) MessageBox(NULL,x,y,MB_OK)

SOCKET sock;

long WINAPI GetData(long lParam)
{
	WSABUF *wbuf = new WSABUF;
	wbuf-&gt;buf=new char[255];
	wbuf-&gt;len=254;
	char test[255];
	DWORD dwFlags =0, dwBytesRet = 0;
	fd_set st;
	st.fd_array[0]=sock;
	st.fd_count=1;
	timeval time;
	time.tv_sec = 2;
	time.tv_usec = 0;
	int s=0;
	while(true)
	{
		ZeroMemory(wbuf-&gt;buf,sizeof(wbuf-&gt;buf));
		ZeroMemory(test,sizeof(test));
		dwFlags = 0;

			//if(WSARecv(sock,wbuf,1,&amp;dwBytesRet,&amp;dwFlags,NULL,NULL)!=0)
			if(SOCKET_ERROR==recv(sock,test,254,NULL))
			{	
				if(WSAGetLastError()!=10035)
				{
					char buf[200];
					sprintf(buf,&quot;WSARecv failed. Code %d&quot;,WSAGetLastError(),sock);
					MessageBox(NULL,buf,&quot;Alert!&quot;,MB_OK);
					WSACleanup();
					return 0;
				}
				MBOX(&quot;Would block&quot;,&quot;YEA&quot;);
			}
			MBOX(&quot;Recv&quot;,&quot;YEA&quot;);
			//_snprintf(test,dwBytesRet,wbuf-&gt;buf);
			printf(&quot;%s&quot;,test);

	}

	return lParam;
}

int main()
{
	WSADATA wsd;
	DWORD dwBytesRet=0, dwFlags=0;
	WSABUF *wbuf = new WSABUF;
	wbuf-&gt;buf=new char[255];
	SOCKADDR_IN adr;
	in_addr ad;

	adr.sin_addr.s_addr = inet_addr(&quot;80.240.238.17&quot;);
	adr.sin_family = AF_INET;
	adr.sin_port = htons(6667);
	char test[255];
	sprintf(test,&quot;sin_family: %d sin_addr: %d sin_port: %d sin_zero: %s&quot;,adr.sin_family,adr.sin_addr,adr.sin_port,adr.sin_zero);

	int err=0;

	err=WSAStartup(MAKEWORD(2,2),&amp;wsd);
	if (err!=0)
	{
		MessageBox(NULL, &quot;WSAStartup failed!&quot;,&quot;ERROR&quot;,MB_OK);
		return 0;
	}

	printf(&quot;Startup successful\n&quot;);

	sock= WSASocket(AF_INET, SOCK_STREAM, IPPROTO_IP, NULL, 0,WSA_FLAG_OVERLAPPED);

	//sock=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);
	if(sock==INVALID_SOCKET) 
	{

		MessageBox(NULL,&quot;Creation of Socket failed&quot;,&quot;ERROR&quot;,MB_OK);
		WSACleanup();
        return 0;
    }

	printf(&quot;Socket created\n&quot;);	

	if(WSAConnect(sock,(sockaddr*)&amp;adr,sizeof(sockaddr),NULL,NULL,NULL,NULL)==SOCKET_ERROR) 
	{

		char buf[200];
		sprintf(buf,&quot;Bind call failed!. Code %d&quot;,WSAGetLastError(),sock);
		MessageBox(NULL,buf,&quot;Alert!&quot;,MB_OK);
		WSACleanup();
        return 0;
    }

	printf(&quot;Connected\n&quot;);
	/*ULONG  NonBlock = 1;
    if (ioctlsocket(sock, FIONBIO, &amp;NonBlock) == SOCKET_ERROR)
    {
         printf(&quot;ioctlsocket() failed \n&quot;);
         return 0;
    }*/

	sprintf(wbuf-&gt;buf,&quot;NICK Trogdor\n&quot;);
	wbuf-&gt;len=strlen(wbuf-&gt;buf);
    if(SOCKET_ERROR==WSASend(sock,wbuf,1,&amp;dwBytesRet,dwFlags,NULL,NULL))
	//if(SOCKET_ERROR==recv(sock,test,255,0))
	{

		char buf[200];
		sprintf(buf,&quot;WSARecv failed. Code %d&quot;,WSAGetLastError(),sock);
		MessageBox(NULL,buf,&quot;Alert!&quot;,MB_OK);
		WSACleanup();
		return 0;
	}

	sprintf(wbuf-&gt;buf,&quot;USER Trogdor 0 * TR\n&quot;);
	wbuf-&gt;len=strlen(wbuf-&gt;buf);
    if(SOCKET_ERROR==WSASend(sock,wbuf,1,&amp;dwBytesRet,dwFlags,NULL,NULL))
	//if(SOCKET_ERROR==recv(sock,test,255,0))
	{

		char buf[200];
		sprintf(buf,&quot;WSARecv failed. Code %d&quot;,WSAGetLastError(),sock);
		MessageBox(NULL,buf,&quot;Alert!&quot;,MB_OK);
		WSACleanup();
		return 0;
	}

	fd_set st;
	st.fd_array[0]=sock;
	st.fd_count=1;
	timeval time;
	time.tv_sec = 2;
	time.tv_usec = 0;
	WSAEVENT ev = WSACreateEvent();
	int s=0;
	HANDLE hThread;
	DWORD dwID = 100;
	hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)GetData,NULL,0,NULL);

	while(true)
	{

		ZeroMemory(test,sizeof(test));
		ZeroMemory(wbuf-&gt;buf,sizeof(wbuf-&gt;buf));
		sprintf(wbuf-&gt;buf,&quot;JOIN #pot&quot;);
		wbuf-&gt;len=strlen(wbuf-&gt;buf);
		//sprintf(wbuf-&gt;buf,test);

			//if(SOCKET_ERROR==WSASend(sock,wbuf,1,&amp;dwBytesRet,dwFlags,NULL,NULL))
			if(SOCKET_ERROR==send(sock,wbuf-&gt;buf,wbuf-&gt;len,0))
			{	
				char buf[200];
				sprintf(buf,&quot;WSARecv failed. Code %d&quot;,WSAGetLastError(),sock);
				MessageBox(NULL,buf,&quot;Alert!&quot;,MB_OK);
				WSACleanup();
				return 0;
			}
		MBOX(wbuf-&gt;buf,&quot;!&quot;);
	}

	WSACleanup();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/847421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/847421</guid><dc:creator><![CDATA[Trogdor]]></dc:creator><pubDate>Sun, 07 Aug 2005 12:31:51 GMT</pubDate></item><item><title><![CDATA[Reply to recv funktioniert nicht on Mon, 08 Aug 2005 07:55:35 GMT]]></title><description><![CDATA[<p>Es funktioniert doch.<br />
Bei sprintf(wbuf-&gt;buf,&quot;JOIN #pot&quot;); fehlt noch das Zeilenende, also \n.<br />
Jede manuelle Eingabe mit cin oder scanf() schlug fehl, da diese den String<br />
&quot;JOIN #Channel&quot; in zwei Strings geteilt haben.<br />
Gibt es weitere Befehle, mit denen man einen String eingeben kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/847784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/847784</guid><dc:creator><![CDATA[Trogdor]]></dc:creator><pubDate>Mon, 08 Aug 2005 07:55:35 GMT</pubDate></item><item><title><![CDATA[Reply to recv funktioniert nicht on Mon, 08 Aug 2005 08:24:48 GMT]]></title><description><![CDATA[<p>Ich habs über gets() und strcat() gelöst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/847796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/847796</guid><dc:creator><![CDATA[Trogdor]]></dc:creator><pubDate>Mon, 08 Aug 2005 08:24:48 GMT</pubDate></item></channel></rss>