(Gelöst) C-Programmierung: TCP/IP Client stürzt ab

    (Gelöst) C-Programmierung: TCP/IP Client stürzt ab

    Hallo, ich habe eine Frage, und zwar versuche ich gerade über ein ad-hoc netzwerk eine Verbindung zwischen zwei Rechnern über Sockets aufzubauen. Also damit ist ein Rechner client und der andere server. Der Server haut hin auf SUSE 11.1. Nur der Client bereitet mir Schwierigkeiten indem er diese Meldung ausspuckt:
    ./hello 192.168.12.11 80
    Socket created!
    Speicherzugriffsfehler

    Also erstellt er einen Socket und kann aber hat dann ein Problem.
    Ich habe das Ganze aus einem Beispiel aus Your definite guide to Linux Network Programming.

    Vielleicht erkennt ja einer von Euch auf Anhieb wo der Fehler liegt.. die Bibliotheken sind natürlich eingebunden, und das c-Programm wird fehlerfrei kompiliert. :)

    C-Quellcode

    1. #include <stdio.h>
    2. #include <sys/types.h>
    3. #include <sys/socket.h>
    4. #include <netdb.h>
    5. #include <stdlib.h>
    6. #include <string.h>
    7. const char APRESSMESSAGE[] = "Hello - APRESS FROM AND FOR PROFESSIONAL\n";
    8. int main(int argc, char *argv[])
    9. {
    10. int simpleSocket=0;
    11. int simplePort=0;
    12. int returnStatus=0;
    13. char buffer[256] = "";
    14. struct sockaddr_in simpleServer;
    15. if(3 != argc){
    16. fprintf(stderr, "USAGE %s <port>\n", argv[0]);
    17. exit(1);
    18. }
    19. /*creating streaming socket*/
    20. simpleSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    21. if(simpleSocket == -1) {
    22. fprintf(stderr, "Could not create Socket!\n");
    23. exit(1);
    24. }
    25. else {
    26. fprintf(stderr, "Socket created!\n");
    27. }
    28. /*retrieve the port number for connecting*/
    29. simplePort=atoi(argv[3]);
    30. /*set up the address structure */
    31. /* use IP adress argument to bind all local addresses */
    32. bzero(&simpleServer, sizeof(simpleServer));
    33. simpleServer.sin_family=AF_INET;
    34. inet_addr(argv[2],&simpleServer.sin_addr.s_addr);
    35. simpleServer.sin_port=htons(simplePort);
    36. /* connect to the address and port with our socket*/
    37. returnStatus=bind(simpleSocket,(struct sockaddr *)&simpleServer,sizeof(simpleServer));
    38. if (returnStatus==0) {
    39. fprintf(stderr,"Connect successful!\n");
    40. }
    41. else {
    42. fprintf(stderr,"Could not connect to address!\n");
    43. close(simpleSocket);
    44. exit(1);
    45. }
    46. /*get the message from the Server*/
    47. returnStatus=read(simpleSocket,buffer,sizeof(buffer));
    48. if(returnStatus > 0 ){
    49. printf ("%d: %s", returnStatus, buffer);
    50. }
    51. else {
    52. fprintf(stderr, "Return Status = %d \n", returnStatus);
    53. }
    54. close(simpleSocket);
    55. return 0;
    56. }


    //Edit (RM): Für Konsolenausgaben/Programmcode CODE-Tags verwenden.

    //Edit: Zum zweiten Mal CODE-Tags gesetzt, ab sofort machst Du das dann bitte selbst.

    Achja, ich weiß nicht genau welche Adresse ich beim ausführen des Befehls verwenden muss, und welcher Art die zweite Eingabe ist. Deswegen könnte der Fehler also darin begründet sein. Danke RM fürs editieren, das schaffe ich ab jetzt :D
    Zum Zweiten könnte es mit dem localhost 127.0.0.1 zusammenhängen??
    Wie Ihr seht bin ich noch nicht sehr weit, aber ich werde es nochmal auf einem anderen Weg versuchen, und zwar habe ich diesen Link gefunden.
    TCP Echo Server + Client in C › Forum › ubuntuusers.de

    Ich glaube da sind bei mir noch einige generelle Unklarheiten, die ich ersteinmal durch anlesen ausmerzen sollte. Also für hints bin ich auch dankbar.

    Und hier auch nochmal die Ausgabe nach kompilieren mit -Wall
    gcc socketclient.c -o hello -Wall
    socketclient.c: In function ‘main’:
    socketclient.c:58: warning: implicit declaration of function ‘inet_addr’
    socketclient.c:69: warning: implicit declaration of function ‘close’
    socketclient.c:74: warning: implicit declaration of function ‘read’

    Danke für die Antworten!

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „Hauke“ ()

    AW: Zwei Rechner über Socket verbinden

    Und damit man auch weiß, wie das Ding überhaupt zu bedienen ist:

    Quellcode

    1. fprintf(stderr, "USAGE %s <port>\n", argv[0]);


    in

    Quellcode

    1. fprintf(stderr, "USAGE %s [B]<IP-address>[/B] <port>\n", argv[0]);


    ändern.
    "Programming today is a race between software engineers striving to build better & bigger idiot-proof programs and the Universe trying to produce bigger & better idiots. So far, the Universe is winning." (Rick Cook)

    Dies ist ein _öffentliches_ Supportforum, keinerlei Support per PN, EMail oder Instant Messenger.

    openSUSE Leap 42.3 - Kernel 4.19.x - fluxbox 1.3.7

    Bitmessage: BM-2D8h8QZmvHfgbixWeiG1NDZHG1iXAhBz8K

    AW: Zwei Rechner über Socket verbinden

    hmm.. ja danke schonmal, das ganze rumprobieren hat mir schon sehr geholfen, jetzt komme ich mit W.Richards Stevens Unix Networkprogramming schon besser klar. Ich denke es wird noch einiges an Zeit vergehen, bis ich was wirklich sinnvolles bastele ;) ich meld mich gerne wieder wenn ich dann weiter bin. :D:D