2017-01-19 5 views
0

Существующий сценарий объясняется ниже.TCP-соединение через CAsyncSocket не работает: onConnect никогда не вызывал

Наше приложение работает на архитектуре клиентского сервера; Клиент разработан с помощью VC++, а Server - с C#.
На стороне сервера работают два exe (приложение myServer1.exe -Windows и приложение myServer2.exe -Windows). myServer2.exe связывается с myServer1.exe через соединение сокетов TCP.
На стороне клиента exe (myApp1.exe -Windows Service based) запускает другой exe на основе пользовательских сеансов, присутствующих на машине (myUser.exe для всех пользовательских сеансов). Каждый экземпляр myUser.exe связывается с myApp1.exe через PIPE-связь. И myApp1.exe также связывается с myServer1.exe через другую TCP-связь.

Новый сценарий.

Теперь мы создаем сокет TCP в режиме прослушивания в myServer2.exe (приложение-сервер -C#). myUser.exe (клиентское приложение -VC++) пытается подключиться к myServer2.exe через TCP-соединение, используя CAsyncSocket. Но рамки вызовов (OnConnect, OnReceive и OnClose) не происходят.

Create(0,SOCK_STREAM); // CAyncSocket Socket creation-

сокета Соединения- Connect("ServerIP", "ServerPort"); // CAsyncSocket

Примечание: когда мы перемещаем функциональные возможности создания сокета и подключения в Windows, сервис на базе ехе (myApp1.exe), соединение работает нормально, OnConnect OnReceive и OnClose происходят.

Почему фреймворк для OnConnect не происходит в myUser.exe, в то время как в myApp1.exe есть?

+0

поэтому в основном, у вас есть приложение # Windows Server C и клиентов многие VC++, и вы хотите, чтобы общаться через TCP не так ли? Поделитесь некоторым кодом – salvolds

+0

На данный момент связь между сервером и клиентами работает нормально. Проблема в том, что я хочу создать сокет в myUser.exe с режимом отправки, и myServer2.exe будет слушать его. Но функции уведомления (Onconnect, OnSend и т. Д.) На myUser.exe (VC++) не происходит , Всегда получать ошибку сокета 10035 (операция должна быть удалена позже).Но мы несколько раз пробовали и все еще получали ту же ошибку. Таким образом, «CAsyncSocket :: Connect» всегда терпит неудачу. –

ответ

0

Ваш метод OnConnect не вызывается, потому что, вероятно, вы не имеете цикл сообщений в myUser.exe в то время как у вас в MYAPP.EXE.

Код ошибка 10035 является WSAEWOULDBLOCK и это нормально для вашего случая, от MSDN:

Это нормально для WSAEWOULDBLOCK быть представлено как результат от призвания подключения на сокете Неблокирующего SOCK_STREAM, так как некоторое время должен быть установлен для установления соединения.

Так что не беспокойтесь об этом. Если у вас есть цикл сообщений, после вашего вызова Connect, метод OnConnect, наконец, будет вызываться в определенное время с успешным результатом или с кодом ошибки.

Смотрите также codeproject и SO

+0

Когда мы инициируем TCP-связь между myApp1.exe (VC++) и myServer2.exe (C#), все работает нормально. Итак, мой вопрос заключается в том, что будет точной проблемой, вызывающей эту проблему? –

+0

@Jose. TCP-связь отлично работает при запуске с myApp1.exe, хотя она не работает при запуске с myUser.exe: правильно? Оба они написаны на VC++. Разделяют ли они один и тот же код для открытия TCP-соединения? См. Мой обновленный ответ – salvolds

+0

Да. Оба myApp1.exe и myUser.exe используют один и тот же код VC++. –