Как отправлять и получать данные и подтверждения асинхронно в C ++ сокет TCP / IP? - PullRequest
1 голос
/ 15 ноября 2011

как отправлять и получать данные и подтверждение асинхронно в c ++ сокете tcp / ip ?, я могу видеть в своей программе, как при отправке 145-байтовых данных 50 раз, я получу подтверждение для первых шести, так как это занимает времядать подтверждение.Я пытался ждать, пока я не получу подтверждение для текущих отправленных данных, но это занимает много времени, что я не хочу делать.Я хочу обработать данные.Так что я подумал, я положу получать в отдельном потоке.и я хочу обработать получение одновременно, пока происходит передача?Так будет работать асинхронный прием?Кто-нибудь может помочь?Класс, который я использую для получения и отправки данных, является статическим классом.Поскольку мне нужно было позвонить из двух других классов, чтобы отправить данные на тот же IP-адрес и порт.

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Вы можете использовать сокет для отправки данных в одном потоке и для получения данных в другом потоке одновременно.Вы не можете выполнять одно и то же действие (отправку или получение) на одном и том же сокете из разных потоков.

Тем не менее, всегда старайтесь избегать добавления новых тем, если в этом нет необходимости.Вы можете использовать некоторые функции сокетов ( select , WSAEventSelect ), которые уведомят вас, когда вы сможете выполнять чтение / запись на сокете.Поместите их в цикл в одном потоке, дождитесь событий и обработайте их - читайте и пишите в одном и том же потоке.Если вам нужно обработать полученные данные, а это занимает время, сохраните полученные данные в очереди, совместно используемой другим потоком обработки данных.Конечно, имейте в виду, что вам нужно сделать эту очередь поточно-безопасной и синхронизировать сокет и поток обработки данных.

0 голосов
/ 15 ноября 2011

Если в системах Posix вам может потребоваться мультиплексный системный вызов, например poll или ppoll или pselect или select

Если ваша система не-Posix (например, windows), вы должны найти аналогичные функции или использовать потоки.

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