2015-10-10 5 views
0

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

Редактировать: Я получил его, чтобы клиент успешно отправил строку на сервер. теперь обработать сообщение клиента, как это:

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");.

Client Code (с использованием Winsocks для испытаний атм.):

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

ответ

0

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

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

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

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

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

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

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

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

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