#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
!