[SOCKET] es kommen nur 5 buchstaben an



  • moin

    ich habe hier 2 programme die lokal auf einem rechner miteinander kommunizieren muessen. das mach ich einfach ueber sockets; doch leider kommen immer nur 5 zeichen an, dann wars das (keinerlei fehler)

    also die beiden programme laufen beide auf dem selben rechner, und senden bei an 127.0.0.1 und an denselben port.

    printf("I SEND %s\n", input);
    
            /*if((ret=send(sockfd, input, strlen(input), 0)) < 0) {
                    perror("Error in handle_execute: error by sending");
                    return 1;
            }*/
            write(sockfd, input, 20);
    
            close(sockfd);
    
            return 0;
    }
    

    das ist der codeabschnitt aus dem sendenden process: die printf anweisung vorher, die das, was gesendet werden soll, nochmal auf stdout ausgibt, zeigt einwandfrei den inhalt von input an; das soll gesendet werden (ich habs mit send/recv und write/read probiert, beides das gleiche)

    so sieht der teil des lesenden processes aus

    listenfd = socket(AF_INET, SOCK_STREAM, 0);
    
            bzero(&conn_addr,sizeof(conn_addr));
    
            conn_addr.sin_family = AF_INET;
            conn_addr.sin_port   = htons(PORT_SYS_CMD_TO_SMB_EXE);
            inet_pton(AF_INET, LOCAL_IP, &conn_addr.sin_addr);
    
            if((ret=bind(listenfd, (struct sockaddr *) &conn_addr, sizeof(conn_addr)))!=0) {
                    perror("Error in system_command: bind error");
                    return 1;
            }
    
            listen(listenfd, 1);
    
            if((ret=fork())==0) {
                    strncpy(build_command, command, MAX_COMMAND_LEN);
                    strcat(build_command, EXECUTE_CALL);
    
                    system(build_command);
    
                    exit(0);
            }
    
            sockfd = accept(listenfd, NULL, NULL);
    
            //recv(sockfd, command_output, sizeof(command_output), 0);
            read(sockfd, command_output, sizeof(command_output));
    
            printf("RECV: %s\n", command_output);
    

    der aufruf

    system(build_command);

    ruft uebrigens den sendenden process von oben auf, der das halt sendet; und der hier empfaengt das. eigentlich ganz ordinaerer socket stuff, doch ich kriege immer nur die ersten 5 buchstaben, also

    printf("RECV: %s\n", command_output);

    gibt immer nur die ersten 5 zeichen des strings aus, der urspruenglich geschickt wurde und vom sendenden process korrekt ausgegeben wurde bei:

    printf("I SEND %s\n", input);

    ich bin voellig ratlos und hab keine idee, ihr?

    danke :>



  • problem is fixed, thx anyway

    sizeof(command_output) was the problem cuz its only returns 4


Anmelden zum Antworten