Цель c - Отправка фиксированного объема данных через сокет? - PullRequest
1 голос
/ 22 августа 2010

каждый раз, когда я записываю некоторые данные на свой сервер, я сначала отправляю сообщение, содержащее номер, который должен сообщить серверу, сколько данных я собираюсь отправить.

Например, перед отправкой 1024 байта мне нужно сначала отправить «1024» на сервер, затем сервер может начать чтение для 1024 байтов. Как я могу убедиться, что первое сообщение (количество байтов), которое я отправляю на сервер, всегда имеет одинаковый размер? так например всегда 8 байт

    server - reading 8 bytes
    server - reading the number of bytes mentioned from last message
    server - reading 8 bytes
    server - reading the number of bytes mentioned from last message
    ...
    ...
    ...

Ответы [ 2 ]

0 голосов
/ 22 августа 2010

Решение: я преобразую целое число в nsdata и отправляю его на сервер, таким образом, данные, созданные из целого числа, всегда составляют 4 байта.Так что это поток

- Server is reading (waiting for 4 bytes)
- Client sends 4 bytes containing an integer
- Client sends the actual data
- Server reads 4 bytes convert it to an integer
- Server reads for the amount of bytes it received in the last message
...
...

-(void)SendData: (NSData*)msgData
{
    int i = (int) msgData.length;
    NSData *data = [NSData dataWithBytes: &i length: sizeof(i)];
    [self.soc writeData:data withTimeout:-1 tag:0];
    [self.soc writeData:msgData withTimeout:-1 tag:0];
}
0 голосов
/ 22 августа 2010

Вы пытаетесь сказать, как сервер должен знать, какой размер пакета, содержащего количество байтов, которое нужно принять?

Если это так, вы можете просто продолжать принимать байт за байтом до, скажем, полудвоеточие или какой-либо завершающий символ встречается.Оттуда соберите пакеты, и тогда у вас будет размер данных для получения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...