kommunikation mit Internet...

Karimkaze

Grünschnabel
Für ein kleines Projekt muss ich in C/C++ eine Client-Server Userverifizierung schreiben.
Wir verwenden folgendes Konzept:

Client meldet sich beim Server:
http://www.server.ch/anmeldung/reg.php?serial=XXXX
die serial kommt als hashwer mit IP zusammen in eine Temp. DB
der Server meldet sich wieder zurück:
ipdesclients:1234?serial=XXXX&hash=XXXX
der Client überprüft den hashwert und gibt den status zurück:
http://www.server.ch/anmeldung/reg.php?status=true/false

Auf der Client-seite läuft alles in C/C++ Linux die Server-Seite ist apacher/php. Aber die server-seite ist nicht meine Aufgabe, ich muss das Clientseitige programmieren. derjenige der den php-teil macht hat absolut keine ahnung von C-Programmierung, ich immerhin ein wenig deshalb kann er mir auch nicht helfen. Würde mich freuen wenn jemand mir mit einem kleinen (oder grösseren) Tip könnte helfen.

Die berechnung des Hashwertes habe ich bereits implementiert, meine beiden Hauptprobleme:
- zugriff mit C/C++ auf das Internet ohne das der Benutzer etwas davon mitkriegt.
- mit C/C++ einen bestimmten Internet-Port abhören ob sich der Server meldet.

Achja, natürlich Ansi C Standart...
 
Zuletzt bearbeitet:
Zu den Links:
Das sind pseudolinks die gar nichts existieren, ich habe sie nur aufgeschrieben um das Konzept zu veranschaulichen.

Zur Frage:
Wie kann ich mit C unter Linux eine Webseite ansprechen?
und wie kann ich mit C einen Port abhören ob sich da eine andere Webseite meldet?

Bin unterdessen aber schon etwas weiter gekommen, muss sockets programmieren das habe ich bereits herausgefunden.

Würde mich über ein kleines einfaches Code-Bsp. eines Sockets freuen (sofern jemand eines zurHand hat, wenn ihr aber findet selber suche mit Google, ist das auch in Ordnung. irgendwann werde ich auch eins finden das auch ein DAU wie ich versteht :)), sowie villeicht noch wo bei der socketsprogrammieren schnell mal Fehler passieren.

thx im Voraus
 
uiui... war ja schon laang nich mehr online... tach @ all

soo... karimkaze hab mir die mühe gemacht...
das is n einfaches server programm...
evtl noch winsock.h includen... und nicht vergessen wsock32.lib einzubinden...

Code:
#include <stdio.h>
#include <windows.h>

#define Recv(buf, len) recv(iSock, buf, len, 0) // macht das ganze einfacher
#define Send(buf, len) send(iSock, buf, len, 0) // macht das ganze einfacher
#define BUFFER_SIZE 1024

int main(int argc, char **argv)
{
	WSADATA wsa;
	sockaddr_in srv, cli;
	int iSock, s, cli_size;

	char buffer[BUFFER_SIZE] = ""; // auf NULL setzen	

	if(WSAStartup(MAKEWORD(1, 1), &wsa))
		return 1; // fehler

	s = socket(AF_INET, SOCK_STREAM, 0); // tcp/ip
	if(s == -1)
		return 1; // fehler
	
	srv.sin_addr.s_addr = INADDR_ANY; // 0.0.0.0
	srv.sin_port = htons((unsigned short int)80); // web port
	srv.sin_family = AF_INET;

	if(bind(s, (struct sockaddr*)&srv, sizeof(srv)) == -1)
		return 1; // fehler

	if(listen(s, 1) == -1)
		return 1; // fehler

	printf("Alles Klar.\n");
	while(true) // schleife...
	{
		cli_size = sizeof(cli);
		iSock = accept(s, (struct sockaddr*)&cli, &cli_size); // hier wartet der server auf ein client
		if (iSock == -1)
			continue; // fehler

		printf("Verbindung Mit: %s\n", inet_ntoa(cli.sin_addr)); // ip des clients

		Recv(buffer, BUFFER_SIZE);
		printf("%s\n", buffer); // hier wird ausgegeben (auf dem bildschirm :>), was der client(browser) von dir will... 
								// z.b. "GET /index.html HTTP/1.1" usw... müsstest du alles splitten... 


		Send("Test", 4); // und gleich die "webseite" senden, das wars schon
					   	 // Test = 4 zeichen... solltest dann strlen() nehmen...

		closesocket(iSock); // und nicht vergessen den socket wieder zu schließen, sonst wartet
							// der browser auf weitere daten...
	}

	return 0;
}

#edit:
und um den client kümmer ich mich später :>
bin n bissl müde... client is auch nich schwierig
 
Zuletzt bearbeitet:
Ich würde gern ein Programm schreiben, welches den Login auf einer htaccess-geschützten Seite automatisch durchführt. Ich würde dafür zuerst die Seite mit ShellExecute aufrufen. Wie ist es dann möglich, dass das Programm automatisch die Login-Daten in dem Login-Fenster einträgt und sich einloggt? Funktioniert dies auch über Sockets oder gibts dafür eventuell auch eine einfachere Lösung?
 
Zurück