В настоящее время я пытаюсь использовать мой клиент с библиотекой 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);
В настоящее время я пытаюсь использовать мой клиент с библиотекой Chilkat, поскольку клиент должен быть написан на VCL C ++, а не на Borland C ++ (C ++ Builder).
Что такое «VCL C ++» по сравнению с «Borland C ++»? Вы имеете в виду компилятор командной строки Borland, а не компилятор C ++ Builder? Или вы имеете в виду совершенно другую стороннюю среду VCL, которая не имеет ничего общего с платформой Borland VCL в C ++ Builder? Пожалуйста, уточните свой вопрос.
Подключение работает, но как только я пытаюсь отправить строку с Клиента на Сервер, она даже не попадает в функцию IdTCPServerExecute.
Это трудно объяснить, не видя вашего фактического кода сервера.
TIdTCPServer
создает новый поток для каждого подключенного клиента. TIdTCPServer::OnExecute
событие не привязано к фактической сетевой активности, оно просто запускается в бесконечном цикле на протяжении всего времени жизни каждого потока Единственный способ OnExecute
событие вообще не будет запущено, если либо:
вы блокируете нить в TIdTCPServer::OnConnect
событие, например, делая что-то, что не является потокобезопасным. Или вы делаете что-то, чтобы вызвать исключение, и вы его не перехватываете. Необработанное исключение прервет поток.
клиент отключается, пока TIdTCPServer::OnConnect
обработчик событий все еще работает, или между временем после выхода из обработчика события и до TIdTCPServer::OnExecute
Обработчик события вызывается впервые.
Можно ли даже использовать другую библиотеку для клиента, чем сервер?
Конечно, это возможно. TCP — это стандартизированный транспортный протокол. Пока различные реализации TCP придерживаются стандарта, они могут общаться друг с другом без проблем. Это имеет основополагающее значение для стабильной связи между несколькими платформами, и Интернет полагается на это.
Других решений пока нет …