Проблема со связью между сервером c / клиентом java

#java #c #server #tcp #client

#java #c #сервер #tcp #клиент

Вопрос:

Мне нужно отправить сообщение от клиента Java на сервер c через tcp. В Java я использую PrintWriter и отправляю три строки: операция, представляющая собой число от 0 до 8, длина сообщения и сообщение.

         new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    out = new PrintWriter(new BufferedWriter(
                            new OutputStreamWriter(socket.getOutputStream())),true);
                    String op_code = String.valueOf(MainActivity.LOGIN);
                    String command = username   "#"   psw;
                    int len = command.length()   1;
                    out.println(MainActivity.LOGIN);
                    out.println(len);
                    out.println(command);
                    Log.d("ciao", "run: ciao");
                    //String text = stdIn.readLine();
                    //int result = Integer.parseInt(text);
                    //sendDataToActivity("ACTION",result);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
 

В c у меня есть только 3 read(). Первый прочитал код операции

     char op_code [sizeof(uint8_t)];
    //printf("L'utente %s si è connessen",tc_info->username);

   /** @todo sostituire con variabili di condizione **/
    while(true){

        memset(op_code,'',sizeof(uint8_t));
        if(readn(sock,op_code,sizeof(uint8_t))<0)
             break;
        printf("opcode->%sn",op_code);       
        if(atoi(op_code) == 0)
            break;
            
        select_op(sock,atoi(op_code), amp;tc_info);
    }  
 

Select_op вызывает эту часть кода, которая обрабатывает два других read()

     int readbyte;
    char* command;
    readbyte = read_sign_inup_request(amp;command,fd); 
    if(readbyte<=0)
        {printf("errorn");return;}
 
 int read_sign_inup_request(char** dest, int src){
   
    char len [sizeof(uint8_t)];
    int readed_byte;
    
    memset(len,'',sizeof(uint8_t));

    if((readed_byte=read(src,len,(sizeof(uint8_t)))==0))
        {printf("readed -> %dn",readed_byte); return readed_byte;}
    printf("readed -> %dn",readed_byte); 
    printf("len->%sn",len);                      //**BROKEN HERE**

    int casted_length = atoi(len) ;
    *dest = (char*)malloc(casted_length);

    memset(*dest,'' ,casted_length);
    if((readed_byte=read(src,*dest,casted_length))==0)
        {return readed_byte;}
        
    return readed_byte;
}
 

Моя проблема в том, что len всегда равен 0, я думаю, что проблема в его размере, но я не уверен, как это исправить. Кто-нибудь может мне помочь?

Комментарии:

1. Как вы думаете, насколько велик len массив, в котором вы объявляете char len [sizeof(uint8_t)]; , в любом случае?

2. его размер должен быть 256, нет?

3. sizeof(uint8_t) есть 1 !