Internet mit C

M

Metall

Grünschnabel
Hallo,

Ich habe ein Code in C geschrieben, der sich mitenem Server verbinden soll.
Den Code habe ich vorher schon mal mit php ausprobiert und da hat er noch funktioniert.:think:
Nur in C verbindet sich der code nicht mit dem Server. Der Fehler liegt in der Funktion connect();:hilfe2:

Hier ist der Code:

Code:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>

#define BUF_SIZ 4096

int main( int argc, char **argv) {
	char buff[BUF_SIZ];
	char msg[BUF_SIZ];
	int s;
	struct sockaddr_in server;
	struct hostent *host_info;
	unsigned long addr;
	char str[];
/* Ip Adresse holen*/
	host_info = gethostbyname("loquor.de");
	memcpy( (char *)&server.sin_addr,
	 host_info->h_addr, host_info->h_length );
	server.sin_family = AF_INET;
/*Http Port 80.*/
	server.sin_port = 80;
	printf("Createing Socket:...");
/*Socket erstellen.*/
	s = socket(AF_INET, SOCK_STREAM, 0);
	if (s <= 0) {
		printf("Error.\n");
		return EXIT_SUCCESS;
	} else {
		printf("Ok.\n");
	}
	printf("%s", sizeof(server));
	printf("%s", (struct sockaddr*)&server);
	printf("Connecting with server:...");
	char result;
/*Mit dem Server verbinden.*/
	result = connect(s,(struct sockaddr*)&server,sizeof(server));
	if (result <= 0) {
		printf("Error.\n");
		return EXIT_SUCCESS;
	} else {
		printf("Ok.\n");
	}
/*HTTP 1.1 Anfrage:*/
	char send[] = "GET /mvs/test.txt HTTP/1.1\\n"
					"Host: www.loquor.de\r\n\r\n";
	strcat(send, "\n");
/*HTTP 1.1 Anfrage senden*/
	printf("Sending Socket:...");
	if (send(s, send, strlen(send))) {
		printf("Ok.\n");
	} else {
		printf("Error.\n");
		return EXIT_SUCCESS;
	}
/*Datei vom Server empfangen.*/
	printf("Getting file:...");
	int count = recv(s, buff2, 1024, 0);
	if (count <= 0) {
		printf("Error.\n");
		return EXIT_SUCCESS;
	} else {
		printf("Ok.\n");
	}
/*'\0' an die empfangene Variable anhängen*/
	buff[count] = '\0';
/*Ergebnis ausgeben*/
	printf("Ergebnis des Servers: %s\n", buff);
	close(s);
	return EXIT_SUCCESS;
}

Ich hoffe Ihr könnt mir helfen...

mfg
 
Mit welchem Befehl wolltest du denn compilen?
Sieht mir soweit ok aus, könnte aber auch was übersehen haben.
Was gibt er denn genau für ne Fehlermeldung aus?

MfG,
Buchi
 
ich complimire den mit gcc.
Ne fehlermeldung bekomme ich nicht.
Nur durch meine if-schleifen erhalte ich beim ausführen:

Code:
Createing Socket:...Ok.
Connecting with server:...Error.
 
Entschuldigung, aber in dem Code sind so viele Fehler drin, dass man mühe hat erstmal zu dem Fehler zu kommen, den du beschrieben hast.
Stell hier zumindest einen Code rein, der sich fehlerfrei kompilieren lässt.
$ gcc connect.c
connect.c: In function 'main':
connect.c:19: error: array size missing in 'str'
connect.c:54: error: called object 'send' is not a function
connect.c:62: error: 'buff2' undeclared (first use in this function)
connect.c:62: error: (Each undeclared identifier is reported only once
connect.c:62: error: for each function it appears in.)

Und runtime-errors sind da ja noch gar nicht dabei, wie zum Beispiel solche schönen Sachen:
Code:
printf("%s", sizeof(server));
 
@ Mµ*e^13.5_?¿: Hast recht.

Sorry, das war die falsche version, hier müsste eine version sein, die geht...

Code:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>

#define BUF_SIZ 4096

int main( int argc, char **argv) {
	char buff[BUF_SIZ];
	char msg[BUF_SIZ];
	int s;
	struct sockaddr_in server;
	struct hostent *host_info;
	unsigned long addr;
/* Ip Adresse holen*/
	host_info = gethostbyname("loquor.de");
	memcpy( (char *)&server.sin_addr,
	 host_info->h_addr, host_info->h_length );
	server.sin_family = AF_INET;
/*Http Port 80.*/
	server.sin_port = 80;
	printf("Createing Socket:...");
/*Socket erstellen.*/
	s = socket(AF_INET, SOCK_STREAM, 0);
	if (s <= 0) {
		printf("Error.\n");
		return EXIT_SUCCESS;
	} else {
		printf("Ok.\n");
	}

	printf("Connecting with server:...");
	char result;
/*Mit dem Server verbinden.*/
	result = connect(s,(struct sockaddr*)&server,sizeof(server));
	if (result <= 0) {
		printf("Error.\n");
		return EXIT_SUCCESS;
	} else {
		printf("Ok.\n");
	}
/*HTTP 1.1 Anfrage:*/
	char send[] = "GET /mvs/test.txt HTTP/1.1\\n"
					"Host: www.loquor.de\r\n\r\n";
	strcat(send, "\n");
/*HTTP 1.1 Anfrage senden*/
	printf("Sending Socket:...");
	if (0 <= write(s, send, strlen(send))) {
		printf("Ok.\n");
	} else {
		printf("Error.\n");
		return EXIT_SUCCESS;
	}
/*Datei vom Server empfangen.*/
	printf("Getting file:...");
	int count = recv(s, buff, 1024, 0);
	if (count <= 0) {
		printf("Error.\n");
		return EXIT_SUCCESS;
	} else {
		printf("Ok.\n");
	}
/*'\0' an die empfangene Variable anhängen*/
	buff[count] = '\0';
/*Ergebnis ausgeben*/
	printf("Ergebnis des Servers: %s\n", buff);
	close(s);
	return EXIT_SUCCESS;
}

mfg
 
hab mir den code nicht ganz angeschaut, aber mit dem fehler "error" kann man auch wenig anfangen ersetze printf("error") lieber durch perror ("Fehler:"); dann weisst du was schief gelaufen ist.
 
Danke, aber das hilft mir leider auch nicht weiter.
Die Antwort lautet: Unknownerror.
 
Also hier lautet die Antwort "Connection refused".
Ich vermute mal, dass beim festlegen der Adresse irgendwas im Argen liegt.

Edit: Na da haben wir ja schonmal was
Die Port-Nummer muss im rechten Format vorliegen.
Code:
/*Http Port 80.*/
	server.sin_port = htons(80);
Und bei connect ist der Fehlerfall als -1 definiert
Code:
/*Mit dem Server verbinden.*/
	result = connect(s,(struct sockaddr*)&server,sizeof(server));
	if (result == -1) {
Und wenn dann der HTTP-Request noch richtig ist:
Code:
/*HTTP 1.1 Anfrage:*/
	char send[] = "GET /mvs/test.txt HTTP/1.1\n"
					"Host: www.loquor.de\n\n";
/*HTTP 1.1 Anfrage senden*/
dann funktioniert das ;)
 
Zuletzt bearbeitet:
@ Mµ*e^13.5_?¿: Danke...ich bin sprachlos...es geht...
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

Prozesskommunikation mit PIPES - wie funktioniert das?

Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

Aufgabe in C

Zurück
Oben