C Программирование Linux: Safe Server To Client, Send () -> Recv () Communication?Linux

Ответить
Anonymous
 C Программирование Linux: Safe Server To Client, Send () -> Recv () Communication?

Сообщение Anonymous »

У меня есть проблемы для реализации безопасной передачи данных с сервера в клиентское приложение.
Проблема заключается в том, что данные на стороне сервера выглядят хорошо, но на стороне клиента строки данных смещаются. 0; 436128
0; 436105
1; 436080
2; 436054
3; 436027
4; 435999
5; 435969
6; 435939
7; 435906
8; 435873
9; 435838
10; 435801
11; 435763
12; 435723
13; 435681
14; 435637
15; 435592
16; 435544
17; 435495
18; 435443
19; 435389
20; 435333
< /code>
Вывод клиентской строки после recv (): < /p>
0; 436128
0; 436105
1; 436080
2; 436054
3; 436027
4; 435999
5; 435969
6; 435939
7; 435906
8; 435873
9; 435838
0; 435801
; 435763
435723
435681
14; 435637
15; 435592
16; 435544
17; 435495
18; 435443
19; 435389
20; 435333

Я попытался использовать функции read ()/write (), но у меня есть одинаковые проблемы.
Могу ли я использовать некоторые флаги в функциях send ()/recv () для решения этого? for ( idx=0; idx
Вот что я делаю на стороне клиента: < /p>
for( idx =0; idx < 1024; idx++) {
recv(client_fd, buffer, sizeof(buffer) - 1, 0);
strcpy( &str_line[0], &buffer[0]);
puts(str_line);
}
< /code>
Вот код для функций FormatxData и FormatyData: < /p>
#define DIGIT8 (int)100000000
#define DIGIT7 (int)10000000
#define DIGIT6 (int)1000000
#define DIGIT5 (int)100000
#define DIGIT4 (int)10000
#define DIGIT3 (int)1000
#define DIGIT2 (int)100
#define DIGIT1 (int)10
#define DIGIT0 (int)0

/// @brief fill string with spaces
/// @param num
/// @param str
void formatXData( int num, char* str ) {

char temp_str[16];

if ( num < DIGIT1 ) {
sprintf( temp_str," %d",num);
} else if ( num < DIGIT2) {
sprintf( temp_str," %d",num);
} else if ( num < DIGIT3) {
sprintf( temp_str," %d",num);
} else {
sprintf( temp_str,"%d",num);
}
strcpy( str, &temp_str[0] );
}

/// @brief fill string with spaces
/// @param num
/// @param str
static void formatYData( int num, char* str ) {

char temp_str[16];

if ( (num < DIGIT8) && (num >= DIGIT7) ) {
sprintf( temp_str,"%d",num);
} else if ( (num < DIGIT7) && (num >= DIGIT6) ) {
sprintf( temp_str," %d",num);
} else if ( (num < DIGIT6) && (num >= DIGIT5) ) {
sprintf( temp_str," %d",num);
} else if ( (num < DIGIT5) && (num >= DIGIT4) ) {
sprintf( temp_str," %d",num);
} else if ( (num < DIGIT4) && (num >= DIGIT3) ) {
sprintf( temp_str," %d",num);
} else if ( (num < DIGIT3) && (num >= DIGIT2) ) {
sprintf( temp_str," %d",num);
} else if ( (num < DIGIT2) && (num >= DIGIT1) ) {
sprintf( temp_str," %d",num);
} else if ( (num < DIGIT1) && (num >= DIGIT0) ) {
sprintf( temp_str," %d",num);
} else if ( (num < DIGIT0) && (num >= (-DIGIT1)) ) {
sprintf( temp_str," %d",num);
} else if ( (num < (-DIGIT1)) && (num >= (-DIGIT2)) ) {
sprintf( temp_str," %d",num);
} else if ( (num < (-DIGIT2)) && (num >= (-DIGIT3)) ) {
sprintf( temp_str," %d",num);
} else if ( (num < (-DIGIT3)) && (num >= (-DIGIT4)) ) {
sprintf( temp_str," %d",num);
} else if ( (num < (-DIGIT4)) && (num >= (-DIGIT5)) ) {
sprintf( temp_str," %d",num);
} else if ( (num < (-DIGIT5)) && (num >= (-DIGIT6)) ) {
sprintf( temp_str," %d",num);
} else if ( (num < (-DIGIT6)) && (num >= (-DIGIT7)) ) {
sprintf( temp_str,"%d",num);
} else if( (num < (-DIGIT7)) && (num >= (-DIGIT8)) ) {
sprintf( temp_str,"%d",num);
}
strcpy( str, &temp_str[0] );

}


Подробнее здесь: https://stackoverflow.com/questions/797 ... munication
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»