Wie Dateien zwischen Computern übertragen mit C?

  • Hallo,

    ich stehe gerade vor dem Problem eine Datei mittels C-Programm zwischen zwei Computern übertragen zu müssen. Das heißt, die Übertragung klappt grundsätzlich auch, aber nicht so wie ich mir das vorstelle. Ich bräuchte nämlich einmal einen Server der durchgehend auf einem bestimmten Port lauscht, wartet bis sich ein Client verbindet, die Datei entgegen nimmt und dann weiter lauscht. Hier ist mein bisheriger Versuch:

    Code
    #include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <netdb.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <arpa/inet.h>int main(void) {	int sockfd = 0;	int bytesReceived = 0;	int BUFFERSIZE = 1024;	int TCP_RECV_ARCHIVE_PORT = 50010;	char recvBuff[BUFFERSIZE];	memset(recvBuff, '0', sizeof(recvBuff));	struct sockaddr_in serv_addr;	if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {		printf("error: fetchDataAndExecute: could not create socket");		return 1;	}	serv_addr.sin_family = AF_INET;	serv_addr.sin_port = htons(TCP_RECV_ARCHIVE_PORT);	serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");	if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0 ) {		printf("error: fechDataAndExecute: Connect failed.");		return 1;	}	FILE *fp;	fp = fopen("test.file", "ab");	if (fp == NULL) {		printf("error: fetchDataAndExecute: Unable to open file");		return 1;	}	while ((bytesReceived = read(sockfd, recvBuff, BUFFERSIZE)) > 0) {		printf("debug: fetchDataAndExecute: received %d Bytes. \n", bytesReceived);		fwrite(recvBuff, 1, bytesReceived, fp);	}	if (bytesReceived < 0) {		printf("error: fetchDataAndExecute: Error in data transfer");		return 1;	} 	fclose(fp);	return 0;}

    und

    Das übertragt die Datei (oder hat es zumindest so ähnlich bereits getan, evtl. mittlerweile "kaputt gespielt"), allerdings nur wenn der Empfänger dies anfordert. Der Empfänger soll aber nur lauschen und warten bis was vom Sender kommt. Allerdings bin ich damit schon den halben Nachmittag beschäftigt und stehe irgendwie auf dem Schlauch. Kann mir jemand sagen wo der Fehler liegt oder hat vielleicht jemand ein funktionierendes Beispiel wie es richtig geht?

    Edit: Wie ich dieser Präsentation entnehmen konnte ist wohl listen() das wonach ich suche. Aber wie geht das genau?

    Einmal editiert, zuletzt von Blacktron (12. Februar 2016 um 18:02) aus folgendem Grund: Link zur Präsentation hinzugefügt