<?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[Proxy Switch]]></title><description><![CDATA[<p>hi,</p>
<p>aehm ich hab mal ne Frage. Ich bin dabei einen Proxy Switch zu entwickeln. Das Printip funktioniert auch schon ganz gut (bin auch Grad mit Hilfe meines Programmes im Netz). Mein Problem dabei besteht in nur kleinen aber nervigen Dingen. Vielleicht könnt Ihr Euch mal meinen Code anschauen und mir helfen?</p>
<p>Die Probleme bestehen darin, daß wenn ich eine Seite geladen hab am Ende oft, aber nicht immer die Fehlermeldung &quot;Document contains no data&quot; kommt. Fehler in der Funktionsweise der Seiten hab ich aber bisher noch nicht wirklich feststellen können. <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="😕"
    /> Ich benutze Mozilla 1.6</p>
<p>Weiterhin kann ich mich zwar auf der GMX-Webseite zwar einloggen, doch dann wird der Seiteninhalt verschoben dargestellt und ich kann mich nicht wieder ausloggen. Da kommt ebenfalls die Meldung &quot;Document contains no data&quot;. Das kann irgendwie nur an meinen Programm liegen, da bei einer direkten Verbindung ins Netz diese Fehler nicht auftreten. <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>
<p>BIG THX for help</p>
<pre><code>#include &lt;winsock.h&gt;
#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;iostream.h&gt;
#define PORT 8888
#define HOST localhost

#pragma comment(lib,&quot;ws2_32.lib&quot;) // Um Betriebssystemfunktionen ausführen zu können
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct inetproxy
	{	struct sockaddr_in proxy;
		bool user_proxy;
		bool proxy_server;
		HANDLE connection_ok;//Zur Synchronisation so irgendwie
		SOCKET browser_proxy_sock;
		SOCKET inet_socket;
		bool datalog;
		bool _handle;
		};

DWORD WINAPI server_to_proxy_to_browser(LPVOID lpParam);
DWORD WINAPI browser_to_proxy_to_server(LPVOID lpParam);

SOCKET descriptor;
FILE *Datei;		// DATENFLUSS-Log-Datei
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
DWORD WINAPI browser_to_proxy_to_server(LPVOID lpParam)
{

		inetproxy *helper = new inetproxy;
		// lokale Variablen
		int sin_size;
		SOCKET new_sock=0;
		SOCKET sockel_descriptor=descriptor;
		sin_size=sizeof(struct sockaddr_in);
		struct sockaddr_in test1;

		DWORD dwThreadId;

		//SOCKET accepten
		new_sock=accept(sockel_descriptor,(struct sockaddr*)&amp;test1,&amp;sin_size );

		// Initialisierungen
		helper-&gt;user_proxy=TRUE;
		helper-&gt;proxy_server=FALSE;
		helper-&gt;_handle = FALSE;

		//für Senden an Browser
		helper-&gt;browser_proxy_sock=new_sock;

		//neuen Thread zum weiteren listen
		CreateThread(NULL,0,browser_to_proxy_to_server,&amp;sockel_descriptor,0,&amp;dwThreadId);

		//accept()-ERROR Checking
		if (new_sock	==-1) {	printf(&quot;Fehler: Accept fehlgeschlagen: %d\n&quot;,WSAGetLastError());
		}
		else
			{
				// Daten vom lokalen Socket empfangen
				char buffer[600];
				int	recive_value;
				int send_value;

				// 1. Anfrage von Browser
				recive_value=recv(new_sock,buffer,sizeof(buffer),0); 

				// DATENFLUSS-Log-Datei
				//	Datei = fopen(&quot;data.txt&quot;,&quot;r+&quot;);
				//	fseek(Datei,0,SEEK_END);
				//	fprintf(Datei,&quot;\n\n BROWSER ANFRAGE AN PROXY START (UsertoProxytoServer) \n\n&quot;,0);
				//	fwrite(buffer,sizeof(char),recive_value+2,Datei);	
				//	fprintf(Datei,&quot;\n\n BROWSER ANFRAGE AN PROXY ENDE (UsertoProxytoServer) \n\n&quot;,0);
				//	fclose(Datei);}

				//ERROR Checking
				if (recive_value== SOCKET_ERROR) {	printf(&quot;Fehler: Empfangsfehler der Browser-Anfrage: %d \n&quot;,WSAGetLastError());
													closesocket(helper-&gt;browser_proxy_sock);
													helper-&gt;user_proxy=FALSE;}

				if (recive_value == 0) {	printf(&quot;Fehler: Verbindung zu Browser unterbrochen: %d \n&quot;,WSAGetLastError());
											closesocket(helper-&gt;browser_proxy_sock);
											helper-&gt;user_proxy=FALSE;}

//# ifdef _DEBUG
//				printf(&quot;\n %d bytes Daten von Browser empfangen:\n [%s]\n&quot;,recive_value,buffer);
//# endif				

		DWORD dwThread1Id; 
		HANDLE hThread1;

		hThread1 = CreateThread(NULL,0,server_to_proxy_to_browser,helper,0,&amp;dwThread1Id);

			if (hThread1 == NULL)
			{
				printf(&quot;Thread-Erstellung Fehlgeschlagen!&quot;);
			}

		helper-&gt;connection_ok=CreateEvent(NULL,TRUE,FALSE,NULL);

		//Warten auf die Verbindung zum Proxy-Server (60 sec)
		if(WaitForSingleObject(helper-&gt;connection_ok,60000)==WAIT_OBJECT_0)
			{	helper-&gt;_handle=TRUE;}

		if (helper-&gt;_handle==TRUE)
			{	CloseHandle(helper-&gt;connection_ok);
				helper-&gt;_handle=FALSE;} //Access Violation ntnet.dll

		while(helper-&gt;user_proxy &amp;&amp; helper-&gt;proxy_server)
			{	

				// Senden zu Proxy-Server über SOCKET inet_socket (aufgebaut in server_to_proxy_to_user)
				send_value=send(helper-&gt;inet_socket,buffer,recive_value,0);		

				// DATENFLUSS-Log-Datei
				//	Datei = fopen(&quot;data.txt&quot;,&quot;r+&quot;);
				//	fseek(Datei,0,SEEK_END);
				//	fprintf(Datei,&quot;\n\n BROWSER ANFRAGE AN SERVER GESENDET START (UsertoProxytoServer / in while-Schleife) \n\n&quot;,0);
				//	fwrite(buffer,sizeof(char),send_value+2,Datei);
				//	fprintf(Datei,&quot;\n\n BROWSER ANFRAGE AN SERVER GESENDET ENDE (UsertoProxytoServer / in while-Schleife) \n\n&quot;,0);
				//	fclose(Datei);}

				// send()-Funktion ERROR-Checking
				if (send_value == SOCKET_ERROR) {	printf(&quot;Senden der www-Anfrage fehlgeschlagen: %d \n&quot;,WSAGetLastError());
													helper-&gt;proxy_server=FALSE;
													closesocket(helper-&gt;inet_socket);
													continue;}

				//Empfangen weiterer Browser-Anfragen
				recive_value = recv(helper-&gt;browser_proxy_sock,buffer,sizeof(buffer),0);

				// DATENFLUSS-Log-Datei
				//	Datei = fopen(&quot;data.txt&quot;,&quot;r+&quot;);
				//	fseek(Datei,0,SEEK_END);
				//	fprintf(Datei,&quot;\n\n BROWSER ANFRAGE AN PROXY START (UsertoProxytoServer / in while-Schleife) \n\n&quot;,0);
				//	fwrite(buffer,sizeof(char),recive_value+2,Datei);
				//	fprintf(Datei,&quot;\n\n BROWSER ANFRAGE AN PROXY ENDE (UsertoProxytoServer / in while-Schleife) \n\n&quot;,0);
				//	fclose(Datei);}

				// recv()-Funktion ERROR-Checking
				if (recive_value== SOCKET_ERROR) {	printf(&quot;Fehler: Empfangsfehler der Browser-Anfrage: %d \n&quot;,WSAGetLastError());
													closesocket(helper-&gt;browser_proxy_sock);
													helper-&gt;user_proxy=FALSE;
													continue;}

				if (recive_value == 0) {	printf(&quot;Fehler: Verbindung zu Browser unterbrochen: %d \n&quot;,WSAGetLastError());
											closesocket(helper-&gt;browser_proxy_sock);
											helper-&gt;user_proxy=FALSE;
											break;}

//# ifdef _DEBUG
//				printf(&quot;\n %d bytes Daten von Browser empfangen:\n [%s]\n&quot;,recive_value,buffer);
//# endif				

			}  // END WHILE

		// Aufräumen
		if (helper-&gt;proxy_server==TRUE) {	helper-&gt;proxy_server=FALSE;
											closesocket(helper-&gt;inet_socket);}

		if (helper-&gt;user_proxy==TRUE)	{	helper-&gt;user_proxy=FALSE;
											closesocket(helper-&gt;browser_proxy_sock);}

		}
	return 0;

}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
DWORD WINAPI server_to_proxy_to_browser(LPVOID lpParam)
{

	inetproxy *helper = (inetproxy*) lpParam;

	// USER INTERFACE
	int inetport=8080;
	const char *inetproxy_addr=&quot;82.185.182.115&quot;;

	helper-&gt;proxy.sin_family=AF_INET;
	helper-&gt;proxy.sin_addr.S_un.S_addr=inet_addr(inetproxy_addr);
	helper-&gt;proxy.sin_port=htons(inetport);
	memcpy(&amp;(helper-&gt;proxy.sin_zero),&quot;\0&quot;,8);

	// !!!!!!!!!USER INETRFACE!!!!!!!!!!!!!
	/*CHECK
	printf(&quot;S_Addresse %d &quot;,helper-&gt;proxy.sin_addr.S_un.S_addr);
	printf(&quot;Sin_Family %d &quot;,helper-&gt;proxy.sin_family);
	printf(&quot;Sin_Port   %d &quot;,helper-&gt;proxy.sin_port);
	printf(&quot;Sin_zero   %d &quot;,helper-&gt;proxy.sin_zero);
	*/
	struct sockaddr_in server;
	int recive_value,send_value;
	char buffer[10000];

	server.sin_addr.S_un.S_addr = helper-&gt;proxy.sin_addr.S_un.S_addr;
	server.sin_family = helper-&gt;proxy.sin_family;
	server.sin_port = helper-&gt;proxy.sin_port;
	memcpy(&amp;(server.sin_zero),helper-&gt;proxy.sin_zero,8);

	helper-&gt;proxy_server=TRUE;			// Verbindung erfolgreich

	//SOCKET aufbauen + ERROR Checking
	helper-&gt;inet_socket=socket(helper-&gt;proxy.sin_family,SOCK_STREAM,0);	
	if (helper-&gt;inet_socket==INVALID_SOCKET)	{	printf(&quot;Fehler: SOCKET-Aufbau zu Inet-Proxy fehlgeschlagen: %d \n&quot;,WSAGetLastError());
													helper-&gt;proxy_server=FALSE;			// Verbindung nicht erfolgreich
													SetEvent(helper-&gt;connection_ok);}	// Startsignal setzen
	// SOCKET connect + ERROR Checking
	if (connect(helper-&gt;inet_socket,(struct sockaddr *)&amp;server,sizeof(struct sockaddr)) !=0)
		{	printf(&quot;Fehler: SOCKET-Connect fehlgeschlagen: %d \n&quot;,WSAGetLastError());
			helper-&gt;proxy_server=FALSE;			// Verbindung nicht erfolgreich
			SetEvent(helper-&gt;connection_ok);}	// Startsignal setzen

	SetEvent(helper-&gt;connection_ok);	// Startsignal setzen

 	while(helper-&gt;user_proxy&amp;&amp;helper-&gt;proxy_server)
	{
		// Daten von Server empfangen
		recive_value = recv(helper-&gt;inet_socket,buffer,sizeof(buffer),0);

		// DATENFLUSS-Log-Datei
		//	Datei = fopen(&quot;data.txt&quot;,&quot;r+&quot;);
		//	fseek(Datei,0,SEEK_END);
		//	fprintf(Datei,&quot;\n\n SERVER ANWORT AN PROXY START (ServertoProxytoUser) \n\n&quot;,0);
		//	fwrite(buffer,sizeof(char),recive_value+2,Datei);
		//	fprintf(Datei,&quot;\n\n SERVER ANWORT AN PROXY ENDE (ServertoProxytoUser) \n\n&quot;,0);
		//	fclose(Datei);

		// recv()-Funktion ERROR Checking
		if (recive_value==SOCKET_ERROR)	{	printf(&quot;Fehler: Empfangen der Daten von Server fehlgeschlagen: %d \n&quot;,WSAGetLastError());
											closesocket(helper-&gt;inet_socket);
											helper-&gt;proxy_server=FALSE;
											break;}

		if (recive_value==0)			{	printf(&quot;Server hat Verbindung geschlossen: %d \n&quot;,WSAGetLastError());
											closesocket(helper-&gt;inet_socket);
											helper-&gt;proxy_server=FALSE;
											break;}

		// Senden der vom Server empfangenen Daten an Browser

		send_value = send(helper-&gt;browser_proxy_sock,buffer,recive_value,0);

		// DATENFLUSS-Log-Datei
		//	Datei = fopen(&quot;data.txt&quot;,&quot;r+&quot;);
		//	fseek(Datei,0,SEEK_END);
		//	fprintf(Datei,&quot;\n\n SERVER ANTWORT AN BROWSER gesendet START (ServertoProxytoUser) \n\n&quot;,0);
		//	fwrite(buffer,sizeof(char),send_value+2,Datei);
		//	fprintf(Datei,&quot;\n\n SERVER ANTWORT AN BROWSER gesendet ENDE (ServertoProxytoUser) \n\n&quot;,0);
		//	fclose(Datei);}

		// ERROR Checking
		if (send_value == SOCKET_ERROR) {	printf(&quot;Fehler: SOCKET_ERROR Senden an Browser fehlgeschlagen: %d \n&quot;,WSAGetLastError());
											closesocket(helper-&gt;browser_proxy_sock);
											helper-&gt;user_proxy=FALSE;
											break;}

# ifdef _DEBUG
				printf(&quot;\n %d bytes Daten von Server empfangen:\n [%s]\n&quot;,recive_value,buffer);
# endif				

	}	// END WHILE

	// Aufräumen
	if (helper-&gt;proxy_server==TRUE) {	helper-&gt;proxy_server=FALSE;
										closesocket(helper-&gt;inet_socket);}

	if (helper-&gt;user_proxy==TRUE)	{	helper-&gt;user_proxy=FALSE;
										closesocket(helper-&gt;browser_proxy_sock);}	
	return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int startserver()
{
		/*	Start:
			Verbindung zwischen Browser und Proxy-Switch herstellen
			dazu:

				1. SOCKET aufbauen
				2. Struktur sockaddr_in beschreiben
					- Adresse egal
					- Port 8888 -&gt;(muss als Port bei Proxyeinstellungen im Browser verwendet werden
				3. SOCKET binden -&gt; bind()
				4. SOCKET abhören (nach ankommenden Daten / Browser-Anfragen)-&gt; listen()
		*/
		// lokale Variablen definieren
		struct sockaddr_in local; //Structur mit Socketadresse und Portangaben 
		SOCKET socket_descriptor=0;	

		// WINDOWS-SOCKET-FUNCTIONS initialisieren + ERROR Checking
		WSADATA wsaData;
        if (WSAStartup(MAKEWORD(1, 1), &amp;wsaData) != 0) 
			{	fprintf(stderr, &quot;WSAStartup failed.\n&quot;);
				exit(1);} 

	  	// Struktur beschreiben
		local.sin_family=AF_INET;
		local.sin_addr.S_un.S_addr=INADDR_ANY; //Adresse egal da nur Port abgehört werden muss um Anfragen des Browsers zu holen
		local.sin_port=htons(PORT);
		memcpy(&amp;(local.sin_zero),&quot;\0&quot;,8);

		// SOCKET aufbauen
		socket_descriptor = socket (AF_INET,SOCK_STREAM,0);

		// ERROR Checking!!
		if (socket_descriptor ==INVALID_SOCKET) 
				{	printf(&quot;Fehler: SOCKET-Aufbau fehlgeschlagen: %d \n &quot;,WSAGetLastError());
					WSACleanup();
				}

		// SOCKET binden + ERROR Checking
		if (bind(socket_descriptor,(struct sockaddr *)&amp;local,sizeof(struct sockaddr))!=0)
				{	printf(&quot;Fehler: SOCKET-Binding fehlgeschlagen: %d \n &quot;,WSAGetLastError());
					WSACleanup( );
				}

		// SOCKET listen + ERROR Checking
		if (listen(socket_descriptor, 10)!=0)
				{	printf(&quot;Fehler: SOCKET-Listen fehlgeschlagen: %d \n &quot;,WSAGetLastError());
					WSACleanup( );}
		else
				{	printf(&quot;Socket-Listen fuer 1. Browser Request\n&quot;);}

	return socket_descriptor;//für globale Variable für den Browser-Listen-SOCKET
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
main()
{
		//startserver
		// DATENFLUSS-Log-Datei erstellen;

		//inetproxy *helper = new inetproxy;
		//char frage;
		descriptor=startserver();
		//helper-&gt;datalog=FALSE;

		//printf(&quot;Soll der Datenfluss aufgezeichnet werden (j/n)?&quot;);
		//while(1)
		//	{	scanf(&quot;%c&quot;,&amp;frage);
		//		if (frage == 'j') {	helper-&gt;datalog=TRUE;
		//							break;}
		//		if (frage == 'n') {	helper-&gt;datalog=FALSE;
		//							break;}
		//	}

		//if (helper-&gt;datalog==TRUE)
		//	{	Datei = fopen(&quot;data.txt&quot;,&quot;w+&quot;);
		//		fclose(Datei);}

		//Thread für Browser_to_Proxy_to_Server
		DWORD dwThreadId;
		HANDLE hThread;

		// Thread Erstellung + ERROR Checking
		hThread = CreateThread(NULL,0,browser_to_proxy_to_server,NULL,0,&amp;dwThreadId);
		if (hThread == NULL)
			{	printf(&quot;Fehler: Thread-Erstellung Fehlgeschlagen!&quot;);}
		else
			{
			// Programm kann mit der Eingabe von &quot;q&quot; beendet werden
			while(1)
				if(getchar()=='q')
					{	printf(&quot;Programm gestoppt&quot;);
						closesocket(descriptor);
						break;
					}
			}
	  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/87426/proxy-switch</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Apr 2026 01:45:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/87426.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Sep 2004 21:48:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Proxy Switch on Wed, 29 Sep 2004 21:48:43 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>aehm ich hab mal ne Frage. Ich bin dabei einen Proxy Switch zu entwickeln. Das Printip funktioniert auch schon ganz gut (bin auch Grad mit Hilfe meines Programmes im Netz). Mein Problem dabei besteht in nur kleinen aber nervigen Dingen. Vielleicht könnt Ihr Euch mal meinen Code anschauen und mir helfen?</p>
<p>Die Probleme bestehen darin, daß wenn ich eine Seite geladen hab am Ende oft, aber nicht immer die Fehlermeldung &quot;Document contains no data&quot; kommt. Fehler in der Funktionsweise der Seiten hab ich aber bisher noch nicht wirklich feststellen können. <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="😕"
    /> Ich benutze Mozilla 1.6</p>
<p>Weiterhin kann ich mich zwar auf der GMX-Webseite zwar einloggen, doch dann wird der Seiteninhalt verschoben dargestellt und ich kann mich nicht wieder ausloggen. Da kommt ebenfalls die Meldung &quot;Document contains no data&quot;. Das kann irgendwie nur an meinen Programm liegen, da bei einer direkten Verbindung ins Netz diese Fehler nicht auftreten. <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>
<p>BIG THX for help</p>
<pre><code>#include &lt;winsock.h&gt;
#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;iostream.h&gt;
#define PORT 8888
#define HOST localhost

#pragma comment(lib,&quot;ws2_32.lib&quot;) // Um Betriebssystemfunktionen ausführen zu können
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct inetproxy
	{	struct sockaddr_in proxy;
		bool user_proxy;
		bool proxy_server;
		HANDLE connection_ok;//Zur Synchronisation so irgendwie
		SOCKET browser_proxy_sock;
		SOCKET inet_socket;
		bool datalog;
		bool _handle;
		};

DWORD WINAPI server_to_proxy_to_browser(LPVOID lpParam);
DWORD WINAPI browser_to_proxy_to_server(LPVOID lpParam);

SOCKET descriptor;
FILE *Datei;		// DATENFLUSS-Log-Datei
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
DWORD WINAPI browser_to_proxy_to_server(LPVOID lpParam)
{

		inetproxy *helper = new inetproxy;
		// lokale Variablen
		int sin_size;
		SOCKET new_sock=0;
		SOCKET sockel_descriptor=descriptor;
		sin_size=sizeof(struct sockaddr_in);
		struct sockaddr_in test1;

		DWORD dwThreadId;

		//SOCKET accepten
		new_sock=accept(sockel_descriptor,(struct sockaddr*)&amp;test1,&amp;sin_size );

		// Initialisierungen
		helper-&gt;user_proxy=TRUE;
		helper-&gt;proxy_server=FALSE;
		helper-&gt;_handle = FALSE;

		//für Senden an Browser
		helper-&gt;browser_proxy_sock=new_sock;

		//neuen Thread zum weiteren listen
		CreateThread(NULL,0,browser_to_proxy_to_server,&amp;sockel_descriptor,0,&amp;dwThreadId);

		//accept()-ERROR Checking
		if (new_sock	==-1) {	printf(&quot;Fehler: Accept fehlgeschlagen: %d\n&quot;,WSAGetLastError());
		}
		else
			{
				// Daten vom lokalen Socket empfangen
				char buffer[600];
				int	recive_value;
				int send_value;

				// 1. Anfrage von Browser
				recive_value=recv(new_sock,buffer,sizeof(buffer),0); 

				// DATENFLUSS-Log-Datei
				//	Datei = fopen(&quot;data.txt&quot;,&quot;r+&quot;);
				//	fseek(Datei,0,SEEK_END);
				//	fprintf(Datei,&quot;\n\n BROWSER ANFRAGE AN PROXY START (UsertoProxytoServer) \n\n&quot;,0);
				//	fwrite(buffer,sizeof(char),recive_value+2,Datei);	
				//	fprintf(Datei,&quot;\n\n BROWSER ANFRAGE AN PROXY ENDE (UsertoProxytoServer) \n\n&quot;,0);
				//	fclose(Datei);}

				//ERROR Checking
				if (recive_value== SOCKET_ERROR) {	printf(&quot;Fehler: Empfangsfehler der Browser-Anfrage: %d \n&quot;,WSAGetLastError());
													closesocket(helper-&gt;browser_proxy_sock);
													helper-&gt;user_proxy=FALSE;}

				if (recive_value == 0) {	printf(&quot;Fehler: Verbindung zu Browser unterbrochen: %d \n&quot;,WSAGetLastError());
											closesocket(helper-&gt;browser_proxy_sock);
											helper-&gt;user_proxy=FALSE;}

//# ifdef _DEBUG
//				printf(&quot;\n %d bytes Daten von Browser empfangen:\n [%s]\n&quot;,recive_value,buffer);
//# endif				

		DWORD dwThread1Id; 
		HANDLE hThread1;

		hThread1 = CreateThread(NULL,0,server_to_proxy_to_browser,helper,0,&amp;dwThread1Id);

			if (hThread1 == NULL)
			{
				printf(&quot;Thread-Erstellung Fehlgeschlagen!&quot;);
			}

		helper-&gt;connection_ok=CreateEvent(NULL,TRUE,FALSE,NULL);

		//Warten auf die Verbindung zum Proxy-Server (60 sec)
		if(WaitForSingleObject(helper-&gt;connection_ok,60000)==WAIT_OBJECT_0)
			{	helper-&gt;_handle=TRUE;}

		if (helper-&gt;_handle==TRUE)
			{	CloseHandle(helper-&gt;connection_ok);
				helper-&gt;_handle=FALSE;} //Access Violation ntnet.dll

		while(helper-&gt;user_proxy &amp;&amp; helper-&gt;proxy_server)
			{	

				// Senden zu Proxy-Server über SOCKET inet_socket (aufgebaut in server_to_proxy_to_user)
				send_value=send(helper-&gt;inet_socket,buffer,recive_value,0);		

				// DATENFLUSS-Log-Datei
				//	Datei = fopen(&quot;data.txt&quot;,&quot;r+&quot;);
				//	fseek(Datei,0,SEEK_END);
				//	fprintf(Datei,&quot;\n\n BROWSER ANFRAGE AN SERVER GESENDET START (UsertoProxytoServer / in while-Schleife) \n\n&quot;,0);
				//	fwrite(buffer,sizeof(char),send_value+2,Datei);
				//	fprintf(Datei,&quot;\n\n BROWSER ANFRAGE AN SERVER GESENDET ENDE (UsertoProxytoServer / in while-Schleife) \n\n&quot;,0);
				//	fclose(Datei);}

				// send()-Funktion ERROR-Checking
				if (send_value == SOCKET_ERROR) {	printf(&quot;Senden der www-Anfrage fehlgeschlagen: %d \n&quot;,WSAGetLastError());
													helper-&gt;proxy_server=FALSE;
													closesocket(helper-&gt;inet_socket);
													continue;}

				//Empfangen weiterer Browser-Anfragen
				recive_value = recv(helper-&gt;browser_proxy_sock,buffer,sizeof(buffer),0);

				// DATENFLUSS-Log-Datei
				//	Datei = fopen(&quot;data.txt&quot;,&quot;r+&quot;);
				//	fseek(Datei,0,SEEK_END);
				//	fprintf(Datei,&quot;\n\n BROWSER ANFRAGE AN PROXY START (UsertoProxytoServer / in while-Schleife) \n\n&quot;,0);
				//	fwrite(buffer,sizeof(char),recive_value+2,Datei);
				//	fprintf(Datei,&quot;\n\n BROWSER ANFRAGE AN PROXY ENDE (UsertoProxytoServer / in while-Schleife) \n\n&quot;,0);
				//	fclose(Datei);}

				// recv()-Funktion ERROR-Checking
				if (recive_value== SOCKET_ERROR) {	printf(&quot;Fehler: Empfangsfehler der Browser-Anfrage: %d \n&quot;,WSAGetLastError());
													closesocket(helper-&gt;browser_proxy_sock);
													helper-&gt;user_proxy=FALSE;
													continue;}

				if (recive_value == 0) {	printf(&quot;Fehler: Verbindung zu Browser unterbrochen: %d \n&quot;,WSAGetLastError());
											closesocket(helper-&gt;browser_proxy_sock);
											helper-&gt;user_proxy=FALSE;
											break;}

//# ifdef _DEBUG
//				printf(&quot;\n %d bytes Daten von Browser empfangen:\n [%s]\n&quot;,recive_value,buffer);
//# endif				

			}  // END WHILE

		// Aufräumen
		if (helper-&gt;proxy_server==TRUE) {	helper-&gt;proxy_server=FALSE;
											closesocket(helper-&gt;inet_socket);}

		if (helper-&gt;user_proxy==TRUE)	{	helper-&gt;user_proxy=FALSE;
											closesocket(helper-&gt;browser_proxy_sock);}

		}
	return 0;

}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
DWORD WINAPI server_to_proxy_to_browser(LPVOID lpParam)
{

	inetproxy *helper = (inetproxy*) lpParam;

	// USER INTERFACE
	int inetport=8080;
	const char *inetproxy_addr=&quot;82.185.182.115&quot;;

	helper-&gt;proxy.sin_family=AF_INET;
	helper-&gt;proxy.sin_addr.S_un.S_addr=inet_addr(inetproxy_addr);
	helper-&gt;proxy.sin_port=htons(inetport);
	memcpy(&amp;(helper-&gt;proxy.sin_zero),&quot;\0&quot;,8);

	// !!!!!!!!!USER INETRFACE!!!!!!!!!!!!!
	/*CHECK
	printf(&quot;S_Addresse %d &quot;,helper-&gt;proxy.sin_addr.S_un.S_addr);
	printf(&quot;Sin_Family %d &quot;,helper-&gt;proxy.sin_family);
	printf(&quot;Sin_Port   %d &quot;,helper-&gt;proxy.sin_port);
	printf(&quot;Sin_zero   %d &quot;,helper-&gt;proxy.sin_zero);
	*/
	struct sockaddr_in server;
	int recive_value,send_value;
	char buffer[10000];

	server.sin_addr.S_un.S_addr = helper-&gt;proxy.sin_addr.S_un.S_addr;
	server.sin_family = helper-&gt;proxy.sin_family;
	server.sin_port = helper-&gt;proxy.sin_port;
	memcpy(&amp;(server.sin_zero),helper-&gt;proxy.sin_zero,8);

	helper-&gt;proxy_server=TRUE;			// Verbindung erfolgreich

	//SOCKET aufbauen + ERROR Checking
	helper-&gt;inet_socket=socket(helper-&gt;proxy.sin_family,SOCK_STREAM,0);	
	if (helper-&gt;inet_socket==INVALID_SOCKET)	{	printf(&quot;Fehler: SOCKET-Aufbau zu Inet-Proxy fehlgeschlagen: %d \n&quot;,WSAGetLastError());
													helper-&gt;proxy_server=FALSE;			// Verbindung nicht erfolgreich
													SetEvent(helper-&gt;connection_ok);}	// Startsignal setzen
	// SOCKET connect + ERROR Checking
	if (connect(helper-&gt;inet_socket,(struct sockaddr *)&amp;server,sizeof(struct sockaddr)) !=0)
		{	printf(&quot;Fehler: SOCKET-Connect fehlgeschlagen: %d \n&quot;,WSAGetLastError());
			helper-&gt;proxy_server=FALSE;			// Verbindung nicht erfolgreich
			SetEvent(helper-&gt;connection_ok);}	// Startsignal setzen

	SetEvent(helper-&gt;connection_ok);	// Startsignal setzen

 	while(helper-&gt;user_proxy&amp;&amp;helper-&gt;proxy_server)
	{
		// Daten von Server empfangen
		recive_value = recv(helper-&gt;inet_socket,buffer,sizeof(buffer),0);

		// DATENFLUSS-Log-Datei
		//	Datei = fopen(&quot;data.txt&quot;,&quot;r+&quot;);
		//	fseek(Datei,0,SEEK_END);
		//	fprintf(Datei,&quot;\n\n SERVER ANWORT AN PROXY START (ServertoProxytoUser) \n\n&quot;,0);
		//	fwrite(buffer,sizeof(char),recive_value+2,Datei);
		//	fprintf(Datei,&quot;\n\n SERVER ANWORT AN PROXY ENDE (ServertoProxytoUser) \n\n&quot;,0);
		//	fclose(Datei);

		// recv()-Funktion ERROR Checking
		if (recive_value==SOCKET_ERROR)	{	printf(&quot;Fehler: Empfangen der Daten von Server fehlgeschlagen: %d \n&quot;,WSAGetLastError());
											closesocket(helper-&gt;inet_socket);
											helper-&gt;proxy_server=FALSE;
											break;}

		if (recive_value==0)			{	printf(&quot;Server hat Verbindung geschlossen: %d \n&quot;,WSAGetLastError());
											closesocket(helper-&gt;inet_socket);
											helper-&gt;proxy_server=FALSE;
											break;}

		// Senden der vom Server empfangenen Daten an Browser

		send_value = send(helper-&gt;browser_proxy_sock,buffer,recive_value,0);

		// DATENFLUSS-Log-Datei
		//	Datei = fopen(&quot;data.txt&quot;,&quot;r+&quot;);
		//	fseek(Datei,0,SEEK_END);
		//	fprintf(Datei,&quot;\n\n SERVER ANTWORT AN BROWSER gesendet START (ServertoProxytoUser) \n\n&quot;,0);
		//	fwrite(buffer,sizeof(char),send_value+2,Datei);
		//	fprintf(Datei,&quot;\n\n SERVER ANTWORT AN BROWSER gesendet ENDE (ServertoProxytoUser) \n\n&quot;,0);
		//	fclose(Datei);}

		// ERROR Checking
		if (send_value == SOCKET_ERROR) {	printf(&quot;Fehler: SOCKET_ERROR Senden an Browser fehlgeschlagen: %d \n&quot;,WSAGetLastError());
											closesocket(helper-&gt;browser_proxy_sock);
											helper-&gt;user_proxy=FALSE;
											break;}

# ifdef _DEBUG
				printf(&quot;\n %d bytes Daten von Server empfangen:\n [%s]\n&quot;,recive_value,buffer);
# endif				

	}	// END WHILE

	// Aufräumen
	if (helper-&gt;proxy_server==TRUE) {	helper-&gt;proxy_server=FALSE;
										closesocket(helper-&gt;inet_socket);}

	if (helper-&gt;user_proxy==TRUE)	{	helper-&gt;user_proxy=FALSE;
										closesocket(helper-&gt;browser_proxy_sock);}	
	return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int startserver()
{
		/*	Start:
			Verbindung zwischen Browser und Proxy-Switch herstellen
			dazu:

				1. SOCKET aufbauen
				2. Struktur sockaddr_in beschreiben
					- Adresse egal
					- Port 8888 -&gt;(muss als Port bei Proxyeinstellungen im Browser verwendet werden
				3. SOCKET binden -&gt; bind()
				4. SOCKET abhören (nach ankommenden Daten / Browser-Anfragen)-&gt; listen()
		*/
		// lokale Variablen definieren
		struct sockaddr_in local; //Structur mit Socketadresse und Portangaben 
		SOCKET socket_descriptor=0;	

		// WINDOWS-SOCKET-FUNCTIONS initialisieren + ERROR Checking
		WSADATA wsaData;
        if (WSAStartup(MAKEWORD(1, 1), &amp;wsaData) != 0) 
			{	fprintf(stderr, &quot;WSAStartup failed.\n&quot;);
				exit(1);} 

	  	// Struktur beschreiben
		local.sin_family=AF_INET;
		local.sin_addr.S_un.S_addr=INADDR_ANY; //Adresse egal da nur Port abgehört werden muss um Anfragen des Browsers zu holen
		local.sin_port=htons(PORT);
		memcpy(&amp;(local.sin_zero),&quot;\0&quot;,8);

		// SOCKET aufbauen
		socket_descriptor = socket (AF_INET,SOCK_STREAM,0);

		// ERROR Checking!!
		if (socket_descriptor ==INVALID_SOCKET) 
				{	printf(&quot;Fehler: SOCKET-Aufbau fehlgeschlagen: %d \n &quot;,WSAGetLastError());
					WSACleanup();
				}

		// SOCKET binden + ERROR Checking
		if (bind(socket_descriptor,(struct sockaddr *)&amp;local,sizeof(struct sockaddr))!=0)
				{	printf(&quot;Fehler: SOCKET-Binding fehlgeschlagen: %d \n &quot;,WSAGetLastError());
					WSACleanup( );
				}

		// SOCKET listen + ERROR Checking
		if (listen(socket_descriptor, 10)!=0)
				{	printf(&quot;Fehler: SOCKET-Listen fehlgeschlagen: %d \n &quot;,WSAGetLastError());
					WSACleanup( );}
		else
				{	printf(&quot;Socket-Listen fuer 1. Browser Request\n&quot;);}

	return socket_descriptor;//für globale Variable für den Browser-Listen-SOCKET
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
main()
{
		//startserver
		// DATENFLUSS-Log-Datei erstellen;

		//inetproxy *helper = new inetproxy;
		//char frage;
		descriptor=startserver();
		//helper-&gt;datalog=FALSE;

		//printf(&quot;Soll der Datenfluss aufgezeichnet werden (j/n)?&quot;);
		//while(1)
		//	{	scanf(&quot;%c&quot;,&amp;frage);
		//		if (frage == 'j') {	helper-&gt;datalog=TRUE;
		//							break;}
		//		if (frage == 'n') {	helper-&gt;datalog=FALSE;
		//							break;}
		//	}

		//if (helper-&gt;datalog==TRUE)
		//	{	Datei = fopen(&quot;data.txt&quot;,&quot;w+&quot;);
		//		fclose(Datei);}

		//Thread für Browser_to_Proxy_to_Server
		DWORD dwThreadId;
		HANDLE hThread;

		// Thread Erstellung + ERROR Checking
		hThread = CreateThread(NULL,0,browser_to_proxy_to_server,NULL,0,&amp;dwThreadId);
		if (hThread == NULL)
			{	printf(&quot;Fehler: Thread-Erstellung Fehlgeschlagen!&quot;);}
		else
			{
			// Programm kann mit der Eingabe von &quot;q&quot; beendet werden
			while(1)
				if(getchar()=='q')
					{	printf(&quot;Programm gestoppt&quot;);
						closesocket(descriptor);
						break;
					}
			}
	  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/617528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/617528</guid><dc:creator><![CDATA[rona]]></dc:creator><pubDate>Wed, 29 Sep 2004 21:48:43 GMT</pubDate></item><item><title><![CDATA[Reply to Proxy Switch on Sun, 03 Oct 2004 15:10:04 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Hab mich gleich erstmal registriert.</p>
<p>Ich hab das Problem nur auf WinXP und/oder Win2k</p>
<p>Auf Win98SE funzt das Programm (inzwischen leicht abgeändert, aber Funktionsweise immernoch die selbe) ohne Probleme <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>
<p>Hat irgendjemand eine Vermutung woran das liegen könnte (irgendetwas das direkt mit dem Quellcode zusammenhängt)? Ich hab nämlich keine! Das das 2 bzw. 3 unterschiedliche Betriebssysteme sind weiß ich selber.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/619984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/619984</guid><dc:creator><![CDATA[rona]]></dc:creator><pubDate>Sun, 03 Oct 2004 15:10:04 GMT</pubDate></item></channel></rss>