Вопрос

У меня есть клиент iOS, настроенный с сервером Linux C через TCP / IP. Проблема, с которой я столкнулся: После того, как соединение установлено, сервер ожидает данных (read ()) и представляет их на экране после получения от iPod. Затем он снова возвращается к read () и так далее. Я могу сделать это чтение / запись один раз, но не навсегда. Код:

родовое слово

Хорошо. Итак, насколько я знаю, этот метод и случай будут запускаться автоматически после чтения на стороне сервера. Это отлично работает при первом вызове read () на сервере, но при втором вызове сервер просто продолжает зависать для некоторых данных. Журнал, который у меня есть в xcode, показывает, что происходит:

2011-06-17 16: 23: 50.154 sliderFinal [7430: 207] >>: NSStreamEventOpenCompleted // Один из потоков был открыт

2011-06-17 16: 23: 50.156 sliderFinal [7430: 207] <<: NSStreamEventOpenCompleted // Другой поток был открыт

2011-06-17 16: 23: 50.157 sliderFinal [7430: 207] Данные отправлены // Данные были отправлены после первого чтения () с сервера

2011-06-17 16: 23: 50.159 sliderFinal [7430: 207] <<: NSStreamEventHasSpaceAvailable // Это относится к первому вызову read () с сервера

Я вижу, что после первого раунда сервер чего-то ждет. Это сообщение, кажется, снова не доходит до NSStreamEventHasSpaceAvailable. Есть идеи?

Это было полезно?

Решение

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

Использовался следующий метод:

родовое слово

И вот код, который я использовал (вместо того, что написано в вопросе):

родовое слово

Также я заметил, что сервер после read () и printf (msg) , он представил мне сообщение о том, что соединение было прервано, поэтому яизменил код на стороне сервера, где я проверял , был ли сервер по-прежнему связан с клиентом, например:

check = recv(newsockf,buffer,256, MSG_PEEK|MSG_DONTWAIT);

родовое слово

..к этому:

родовое слово

Кажется, это помогло.Теперь он не зря отключается.Проблема решена.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top