Indy TCP / IP сервер с клиентом, использующим библиотеку Chilkat

В настоящее время я пытаюсь использовать мой клиент с библиотекой Chilkat, поскольку клиент должен быть написан на Visual C ++, а не на Borland C ++ (C ++ Builder).
Подключение работает, но как только я пытаюсь отправить строку с Клиента на Сервер, она даже не IdTCPServerExecute Функция.
Можно ли даже использовать другую библиотеку для клиента, чем сервер? Если так, то как?

Редактировать:
Я понял, что Клиент успешно отправляет строку на сервер.
Теперь я обрабатываю сообщение клиента следующим образом:

UnicodeString Message = AContext->Connection->Socket->AllData();

Вместо:

UnicodeString Message = AContext->Connection->Socket->ReadLn();

Теперь есть опция simliar для отправки строки ответа с сервера?

        if (IdHTTP->Get
("http://*/index.php?option=com_bookpro&controller=customer&task=bpajaxlogin&username=" +
slTokens->Strings[1] + "&password=" + slTokens->Strings[2] +
"&product_id=" + Class) == "true") {
AddLog("1");
char* Response = "Test";
AContext->Connection->Socket->Write(Response);
AddLog("2");
}
else {
AContext->Connection->Socket->WriteLn
("Authentication failed");

}

Это также касается только AddLog("1"); и не отображается AddLog("2");,

Код клиента (используя Winsocks для тестирования атм.):

recv(ConnectSocket, recvbuf, recvbuflen, 0);
printf("Bytes received: %d, %s\n", sizeof(recvbuf), recvbuf);

0

Решение

В настоящее время я пытаюсь использовать мой клиент с библиотекой Chilkat, поскольку клиент должен быть написан на VCL C ++, а не на Borland C ++ (C ++ Builder).

Что такое «VCL C ++» по сравнению с «Borland C ++»? Вы имеете в виду компилятор командной строки Borland, а не компилятор C ++ Builder? Или вы имеете в виду совершенно другую стороннюю среду VCL, которая не имеет ничего общего с платформой Borland VCL в C ++ Builder? Пожалуйста, уточните свой вопрос.

Подключение работает, но как только я пытаюсь отправить строку с Клиента на Сервер, она даже не попадает в функцию IdTCPServerExecute.

Это трудно объяснить, не видя вашего фактического кода сервера.

TIdTCPServer создает новый поток для каждого подключенного клиента. TIdTCPServer::OnExecute событие не привязано к фактической сетевой активности, оно просто запускается в бесконечном цикле на протяжении всего времени жизни каждого потока Единственный способ OnExecute событие вообще не будет запущено, если либо:

  1. вы блокируете нить в TIdTCPServer::OnConnect событие, например, делая что-то, что не является потокобезопасным. Или вы делаете что-то, чтобы вызвать исключение, и вы его не перехватываете. Необработанное исключение прервет поток.

  2. клиент отключается, пока TIdTCPServer::OnConnect обработчик событий все еще работает, или между временем после выхода из обработчика события и до TIdTCPServer::OnExecute Обработчик события вызывается впервые.

Можно ли даже использовать другую библиотеку для клиента, чем сервер?

Конечно, это возможно. TCP — это стандартизированный транспортный протокол. Пока различные реализации TCP придерживаются стандарта, они могут общаться друг с другом без проблем. Это имеет основополагающее значение для стабильной связи между несколькими платформами, и Интернет полагается на это.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector