Я реализовал связь TCP/IP между программами VB и VC++, запущенными на одном компьютере. На стороне VC++ я создаю поток, который прослушивает подключения. На стороне VB я использую Winsock API для подключения к серверу C++. Кажется, что все работает нормально, особенно когда я вручную отлаживаю и перебираю сообщение. Протокол основан на тексте, команды заканчиваются на '\ n' и могут иметь или не иметь ответа.Как сериализовать telnet как связь при подключении двунаправленного сокета?
И вот в чем проблема. Я пытаюсь реализовать команды, которые отправляются на сервер, для этого требуется некоторая обработка, и сервер отправляет их обратно клиенту. В простых условиях это работает нормально, но при большой нагрузке или в разных машинных конфигурациях иногда связь прерывается.
Клиент может отправлять команду, но сервер может отправлять ответ предыдущей команды. Клиент VB каким-то образом получает фрагментированный ответ (скажем, вместо «DATA RECEIVED» он получает «EIVED»), который разбивает конечный автомат, который я использовал для отслеживания соединения.
Так что, клиент и сервер говорят одновременно, и это создает проблему. Как я могу сериализовать или поставить в очередь эту связь? Я понимаю, что это будет похоже на проблему столкновения сетевых пакетов в сети Ethernet.
TCP уже сериализован - у вас есть ошибка в коде. – Erik
Чаще всего ошибка в коде. Не компилятор, операционная система или стандартная библиотека шаблонов. –
Да, если бы я не сделал ошибку в своем коде, я бы не стал просить здесь о помощи по проблеме, которую я едва понимаю. Любые предложения о том, что я могу сделать, чтобы узнать, где эта ошибка? Серверная сторона? Сторона клиента? Есть ли способ удостовериться, что хотя бы одна из конечных точек делает все правильно? Может быть, прокси для регистрации/мониторинга связи? Какие инструменты можно отладить, кроме printfs? –