Я делаю тест с клиентским приложением TCP на сервере Raspberry Pi (сервер на ПК) с PPP (протокол Point-Point Protocol) с использованием модема LTE. Я использовал программу C с сокетами, проверяя ответ системного вызова. Я хотел проверить, как сокет работает в плохой зоне покрытия, поэтому я сделал несколько тестов, удалив антенну.TCP-сокеты в C с плохой сетью
Я следовал следующие шаги:
- подключиться к серверу -> OK
- Начать отправку данных (запись системного вызова) -> OK (я также проверить на сервере)
- Я снял антенну LTE модема (Там нет сети, он не может сделать пинг)
- Продолжить отправку данных (написать системный вызов) -> OK (сервер не получает anyth ING !!!)
- Он закончил передачу данных и закрытый сокет ->OK (соединение все еще открыто, и нет никаких данных, так как антенна была удалена)
- Программы была закончена
- я снова поставил антенну
Спустя некоторое время данные были загружены и соединение закрыто. Но я сделал еще один тест, выполнив следующие шаги, но с дополнительными данными, и он не загрузил эти данные ...
Я не знаю, есть ли способ гарантировать, что данные, записанные на сервер TCP, будут получены сервером (Я думал, что уровень TCP обеспечил это ...). Я мог бы сделать это вручную, используя ACK, но я предполагаю, что это должен быть лучший способ сделать.
Отправка часть кода:
while(i<100)
{
sprintf(buf, "Message %d\n", i);
Return = write(Sock_Fd, buf, strlen(buf));
if(Return!=strlen(buf))
{
printf("Error sending data to TCP server. \n");
printf("Error str: %s \n", strerror(errno));
}
else
{
printf("write successful %d\n", i);
i++;
}
sleep(2);
}
Большое спасибо за вашу помощь.
вы используете неблокирующие сокеты? Как вы пишете данные и проверяете результаты? Можете ли вы попробовать создать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) клиентской программы и показать нам? –
Я использую режим по умолчанию, режим блокировки, который я предполагаю (когда я подключаюсь к серверу, он ждет, пока не будет установлено соединение). –