PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : proxy, fehler im algo, blos wo?


pau
29.09.2008, 23:09
hi
und zwar bin ich grade dabei einen proxy zu schreiben der zum teil auch funktioniert
naja jedoch klappt das nicht die ganze seite die daten weiterzuleiten
ich hab keine ahnung wo der fehler liegt
guckt es euch doch einmal an und sagt ich falsch gemacht habe.

hier nochmal fix mein algo
-client->proxy
-ip aufloesen und mit connect() zum http server
-daten senden zum http server
-while schleife fuer den empfang der daten vom http server mit gleichzeitiger weiterleitung der daten an client
-antwort von client abwarten
-das gleiche speil wieder von vorne


quell code
#include <stdio.h> // Header für Input/Output
#include <windows.h> // Standart-Header für alle Windows-Programme
#include <winsock2.h> // Header für die Verwendung von Sockets
#include <string.h>

//server

SOCKET sc;

int url(char rec[512])
{
char pos1[512];
char urls[512];
char url[512];
char *ip;
HOSTENT *dns;


int i;
int n;


strcpy(urls, "\n");
i=0;
n=0;


while(strcmp(pos1,urls)!=0)
{
pos1[0]=rec[i];
pos1[1]='\0';

i++;
}

i=i+6;
memset(pos1, '\0', sizeof(pos1));
while(strcmp(pos1,urls)!=0)
{
url[n]=rec[i];
pos1[0]=rec[i];
pos1[1]='\0';
i++;
n++;
}

url[n-2]='\0';


dns = gethostbyname(url);
ip=inet_ntoa (*(struct in_addr *)*dns->h_addr_list);
printf("HOST:%s, IP:%s\n", url, ip);
return ip;
}


int client(char rec[512], long ckc)
{


long ckh;
char bufh[512];
char bufc[512];
char sen[512];
char *ip;


SOCKET sh;
SOCKADDR_IN addr;

if(ckh==0)
{
printf("Fehler: startWinsock, fehler code: %d\n",ckh);
getchar();
return 1;
}
else
{
printf("Winsock gestartet!\n");
}

sh=socket(AF_INET,SOCK_STREAM,0);
if(sh==INVALID_SOCKET)
{
printf("Fehler: Socket nicht erstellt, fehler code: %d\n",WSAGetLastError());
getchar();
return 1;
}
else
{
printf("Socket erstellt!\n");
}

ip=url(rec);


memset(&addr,0,sizeof(SOCKADDR_IN));
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
addr.sin_addr.s_addr = inet_addr(ip);


if (connect(sh, (struct sockaddr*)&addr, sizeof(addr)) == -1)
{
perror("\nconnect() failed");
getchar();
return 4;
}


memset(bufh, '\0', sizeof(bufh));
strcpy(bufh, rec);
bufh[ckc]='\0';
send(sh, bufh, sizeof(bufh), 0);
printf("client->http:\n%s sizeof:%d\n", bufh, ckc);


memset(bufh, '\0', sizeof(bufh));
ckh=recv(sh, bufh, sizeof(bufh), 0);
bufh[ckh]='\0';
printf("http->proxy:\n%s sizeof:%d\n", bufh, ckc);
send(sc, bufh, sizeof(bufh), 0);
printf("proxy-client:\n%s sizeof:%d\n", bufh, ckc);


while(ckh>0)
{
memset(bufh, '\0', sizeof(bufh));
ckh=recv(sh, bufh, sizeof(bufh), 0);
bufh[ckh]='\0';
send(sc, bufh, sizeof(bufh), 0);
printf("proxy->cleint:%s sizeof:ckh, %d\n\n", bufh, ckh);
printf("hallaso");


}





closesocket(sh);
//getchar();




}





int server()
{

SOCKET s;


WSADATA wsa;
SOCKADDR_IN addr;

int po;
long ck;
char buf[512];
char *buf2;

po=5000;

if(ck=WSAStartup(MAKEWORD(2,0), &wsa)!=0)
{
printf("error, wsastartup:%d", ck);
getchar();
exit(0);

}
printf("WSAStartup succes\n");


s=socket(AF_INET, SOCK_STREAM, 0);

memset(&addr, 0, sizeof(SOCKADDR_IN));
addr.sin_family=AF_INET;
addr.sin_port=htons(po);
addr.sin_addr.s_addr=ADDR_ANY;



if(ck=bind(s, (SOCKADDR*) &addr, sizeof(SOCKADDR_IN))==SOCKET_ERROR)
{
printf("error binding:%d", ck);
getchar();
exit(0);
}
printf("bind succes\n");


if(ck=listen(s, 10)==SOCKET_ERROR)
{
printf("error listen:%d", ck);
}
printf("listen on port:%d\n", po);


sc=accept(s, NULL, NULL);
if(sc==INVALID_SOCKET)
{
printf("error accpet:%d",WSAGetLastError());
}



while(1!=0)
{
memset(buf, '\0', sizeof(buf));
ck=recv(sc, buf, sizeof(buf), 0);
buf[ck]='\0';
printf("\nclient->server:%s, size:%d", buf, ck);
buf2=client(buf, ck);

}


}

int main()
{
server();

getchar();
return 0;


}



mfg, pau


butterkeks
30.09.2008, 21:58
kommt der wenigstens bis "hallaso"? Auf dem ersten Blick sehe ich nichts ungewöhnliches