readv (), writev (), WSARecv (), WSASend () - PullRequest
0 голосов
/ 02 апреля 2009

Надеюсь, вы мне поможете.

Я пытаюсь отправить пакеты по 1000 бит по сети через TCP / IP, и я надеялся, что смогу использовать метод Overlapped I / O как в Cygwin, так и в Windows.

В Cygwin я пытаюсь использовать вызовы функций "readv () и writev ()" для отправки 1000 бит через Windows, я пытаюсь использовать API-интерфейсы WSASend () и WSARecv () в winsock2. h заголовочный файл.

Кажется, что я могу ТОЛЬКО отправить 1000 бит из Cygwin (client.cpp) в Windows (server.cpp). Более 1000 бит, и я сталкиваюсь с неожиданными результатами. Кажется, что биты обернуты или перезаписаны.

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

Спасибо и всего наилучшего, Cornelius

Ответы [ 2 ]

1 голос
/ 02 апреля 2009

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

Из вашего краткого описания проблемы трудно точно сказать, что может быть не так. Скорее всего, вы предполагаете, что ваши чтения будут считывать тот же объем данных, который вы пишете, а это не так в случае с TCP; TCP - это поток байтов, и ваши операции чтения должны принять это во внимание и зациклить соответственно, пока вы не соберете полное «сообщение».

0 голосов
/ 02 апреля 2009

Ваш вопрос довольно неясен, вам нужно уточнить его. Вот еще несколько идей:

  • Отправка «пакетов» с использованием TCP не очень хорошая идея. Модель данных TCP представляет собой поток байтов.
  • Вы уверены, что имеете в виду 1000 бит, а не 1000 байтов?
  • Вам нужно уточнить, что вы подразумеваете под "неожиданными результатами", это очень расплывчато.
  • Перекрытый ввод-вывод , похоже, является специфичной для Windows техникой для асинхронного ввода-вывода, я не ожидал бы, что она будет работать в Cygwin.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...