Hallo Leute, bisher habe ich in C die Daten nur von eine Text Editor gelesen und wieder zu text Editor ausgegeben. Deswegen weiß ich nicht genau wie ich die Daten von dem Client lesen oder schreiben kann. Ich arbeite mit Linux und ich kann nur wissen dass ich die Daten bekommen habe, aber ich habe noch keine Ahnung, wie ich die Daten in C arbeiten kann Ich bin sehr dankbar wenn ihr mir weiter helfen könnte. Carolin
Unter Linux kann man "socket" verwenden. Damit kann man dann den Zugriff auf "Dateizugriff" runterbrechen. Ob das unter Windows auch geht, weiß ich nicht.
Tilo Lutz wrote: > Unter Linux kann man "socket" verwenden. Damit kann man dann > den Zugriff auf "Dateizugriff" runterbrechen. Ob das unter Windows > auch geht, weiß ich nicht. Ja, geht genauso. Allerdings werde ich aus der ursprünglichen Anfrage nicht schlau, wo denn eigentlich das Problem liegt. Eventuell reagiere ich jetzt wieder über, aber für mich klingt das wieder mal nach: Die Aufgabe ist noch mindestens 5 Nummern zu groß (schwer) für den Programmierer. Der OP könnte das jetzt mal als Hinweis nehmen, seine Fragestellung zu überarbeiten und von der Rundumschlagfrage 'Ich hab keine Ahnung, bitte helft mir' zu einer konkreten Fragestellung überzugehen.
Hallo, versuche erstmal ein paar mehr Infos zu bekommen. TCP oder UDP oder per HTTP/FTP. Netzwerk kann auch sein, eine Datei über Samba/NFS zu öffnen, dann geht es wie mit jeder anderen Datei auch, das BS macht den rest. mfg
Karl heinz Buchegger wrote: > Tilo Lutz wrote: >> Unter Linux kann man "socket" verwenden. Damit kann man dann >> den Zugriff auf "Dateizugriff" runterbrechen. Ob das unter Windows >> auch geht, weiß ich nicht. > > Ja, geht genauso. > > Allerdings werde ich aus der ursprünglichen Anfrage nicht schlau, > wo denn eigentlich das Problem liegt. Eventuell reagiere ich jetzt > wieder über, aber für mich klingt das wieder mal nach: Die Aufgabe > ist noch mindestens 5 Nummern zu groß (schwer) für den Programmierer. Die Aufgabe ist vllt schwer für mich. Weil ich noch nie mit socket gearbeitet habe. Wie gesagt ich habe nur mit Text editor die daten gelesen also FILE *data_fp data_fp = fopen(...); Aber mit dem IP-Addr und Port habe ich noch keine Erfahrung. Ich versuche gerade die Information über socket zu verstehen und zu schreiben aber das Programm läuft noch nicht bei mir einen Socket anzuforden habe ich geschafft mit socket(AF_INET, SOCK_STREAM; 0); aber ich konnte keine Verbindung aufbauen Gruß Carolin
Ich habe folgende Code geschrieben aber ich bekomme immer noch keine Daten. Ich bekomme eine Meldung: Transport endpoint is not coneccted obwohl ich sehen kann dass ich daten bekomme mit ein Hilfprogramm (Wireshark)
1 | int sockfd = socket(AF_INET, SOCK_STREAM, 0); |
2 | if(sockfd == -1){ |
3 | perror("socket()"); |
4 | }
|
5 | struct sockaddr_in serv_addr, client; |
6 | serv_addr.sin_family = AF_INET; |
7 | serv_sin_port = htons(SERVER_PORT); |
8 | serv_addr.sin_addr.s_addr = inet_addr("120.220.0.1"); |
9 | if(bind(sochfd, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == -1){ |
10 | perror("bind()"); |
11 | }
|
12 | if(listen(sockfd, 5) == -1){ |
13 | perror("listen()"); |
14 | }
|
15 | char buffer[1024]; |
16 | int len; |
17 | len = sizeof(client); |
18 | if(recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr*) &client, &len) == -1){ |
19 | perror("recvfrom()"); |
20 | }
|
Carolin
Wieso bind und listen? Ich denke du schreibst den Client! Also, per socket() einen Socket anfodern. Dann mittels connect() mit dem Serer connecten und schon kannst du Daten hin und her schieben. Dazu gibts doch massenhaft Tutorials im Web.
Karl heinz Buchegger wrote: > Wieso bind und listen? > Ich denke du schreibst den Client! nein ich bekomme den Daten vom Client. Und ich muss mit der Daten arbeiten dachnach wieder zurück zum Client schicken. Ich versuche erstmal den Daten zu bekommen Carolin
Carolin Zapa wrote: > Karl heinz Buchegger wrote: >> Wieso bind und listen? >> Ich denke du schreibst den Client! > nein ich bekomme den Daten vom Client. Ah, ok. Dann hab ich das falsch verstanden. D.h. du schreibst den Server. Dann geht der Weg allerdings wirklich über bind und listen. Aber erst durch accept() kriegst du dann einen neuen Socket der erzeugt wird, wenn der Client tatsächlich verbindet und auf dem die Datenübertragung läuft. Siehe zb. http://www.csc.villanova.edu/~mdamian/Sockets/TcpSockets.htm
recvfrom ist für Empfang von UDP-Daten, du hast aber einen TCP-Socket (SOCK_STREAM) geöffnet... Soll der Server denn nun für TCP oder für UDP sein?
Hier ein Beispiel server für Linux, Aufruf z.B. mit server localhost 5555 ...
Ernst Bachmann wrote: > recvfrom ist für Empfang von UDP-Daten, du hast aber einen TCP-Socket > (SOCK_STREAM) geöffnet... > > Soll der Server denn nun für TCP oder für UDP sein? für UDP aber wenn ich SOCK_DGRAM benutze dann komme die Meldung bind() Address already in use
Im Anhang findest du von mir ein kleines Beispiel eines TCP-Servers im Form vom http Server (achtung Portnummer beachten). Das ganze auf Linux umzuprogrammieren ist recht easy, man muss nur beachten, dass die Threads unter linux anders programmiert werden. Ach ja und die inlude files nicht vergessen.
Mit UDP schreibe ich mit SOCK_DGRAM
1 | int sockfd = socket(AF_INET, SOCK_DGRAM, 0); |
2 | if(sockfd == -1){ |
3 | perror("socket()"); |
4 | }
|
5 | struct sockaddr_in serv_addr, client; |
6 | serv_addr.sin_family = AF_INET; |
7 | serv_sin_port = htons(SERVER_PORT); |
8 | serv_addr.sin_addr.s_addr = inet_addr("120.220.0.1"); |
9 | //or serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
10 | if(bind(sochfd, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == -1){ |
11 | perror("bind()"); |
12 | }
|
13 | char buffer[1024]; |
14 | socklen_t len; |
15 | len = (int) sizeof(client); |
16 | if(recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr*) &client, &len) |
17 | == -1){ |
18 | perror("recvfrom()"); |
19 | }
|
Und kommt immer noch die Meldung bind()Address already in use :( Carolin
> serv_addr.sin_family = AF_INET; > serv_sin_port = htons(SERVER_PORT); Sollte das nicht serv_addr.sin_port = htons(SERVER_PORT); heissen?
Karl heinz Buchegger wrote: >> serv_addr.sin_family = AF_INET; >> serv_sin_port = htons(SERVER_PORT); > > Sollte das nicht > > serv_addr.sin_port = htons(SERVER_PORT); > > heissen? ja doch. Das war ein Schrebfehler. Carolin
Carolin Zapa wrote: > Karl heinz Buchegger wrote: >>> serv_addr.sin_family = AF_INET; >>> serv_sin_port = htons(SERVER_PORT); >> >> Sollte das nicht >> >> serv_addr.sin_port = htons(SERVER_PORT); >> >> heissen? > > ja doch. Das war ein Schrebfehler. Du sollst Code den du hier reinstellst nicht abtippen, sondern per Copy&Paste hierher kopieren. Das vermeidet dann auch, dass Leute Fehler melden, die im richtigen Code gar nicht vorhanden sind.
Folgender Artikel ist bekannt?? http://www.ibm.com/developerworks/linux/library/l-sockpit/ und der Port ist unter 1024 (oder Programm läuft als root)??
Bernhard M. wrote: > Folgender Artikel ist bekannt?? > http://www.ibm.com/developerworks/linux/library/l-sockpit/ > > und der Port ist unter 1024 (oder Programm läuft als root)?? Danke. Ich habe den Port 1024 benutzt. Es war dumm von mir. Jetzt läuft das Programm Carolin
Bernhard M. wrote: > Folgender Artikel ist bekannt?? > http://www.ibm.com/developerworks/linux/library/l-sockpit/ > > und der Port ist unter 1024 (oder Programm läuft als root)?? uups, Ports für user müssen natürlich über 1024 sein...
Bernhard M. wrote: > Bernhard M. wrote: >> Folgender Artikel ist bekannt?? >> http://www.ibm.com/developerworks/linux/library/l-sockpit/ >> >> und der Port ist unter 1024 (oder Programm läuft als root)?? > > uups, Ports für user müssen natürlich über 1024 sein... Ich habe Port 1024 benutzt aber port 0..1024 unter Linux ist für root. Ich habe jetzt 5001 genommen und das läuft. Carolin
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.