Indy TCP / IP服务器与客户端使用Chilkat库

时间:2015-10-10 02:59:37

标签: c++ indy 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进行测试atm。):

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

1 个答案:

答案 0 :(得分:0)

  

我目前正在尝试将我的客户端与Chilkat库一起使用,因为客户端必须用VCL C ++而不是Borland C ++(C ++ Builder)编写。

与“Borland C ++”相比,什么是“VCL C ++”?你指的是Borland的命令行编译器,而不是C ++ Builder编译器?或者您指的是与C ++ Builder中Borland的VCL框架无关的完全不同的第三方VCL框架?请澄清你的问题。

  

连接确实有效,但是一旦我尝试从客户端向服务器发送字符串,它甚至都没有点击IdTCPServerExecute函数。

如果没有看到实际的服务器代码,很难解释。

TIdTCPServer为每个连接的客户端创建一个新线程。 TIdTCPServer::OnExecute事件与实际网络活动无关,它只是在每个线程的生命周期中无限循环触发。根本不会触发OnExecute事件的唯一方法是:

  1. 你在TIdTCPServer::OnConnect事件中使线程死锁,例如做一些非线程安全的事情。或者,你正在做一些事情,导致抛出异常,你没有抓住它。未捕获的异常将终止该线程。

  2. 客户端在TIdTCPServer::OnConnect事件处理程序仍在运行时断开连接,或者在事件处理程序退出之后和第一次调用TIdTCPServer::OnExecute事件处理程序之前的时间之间断开连接。 / p>

  3.   

    甚至可以为客户端使用另一个库而不是服务器正在使用?

    当然有可能。 TCP是标准化的传输协议。只要不同的TCP实现符合标准,它们就可以毫无问题地相互通信。这对于跨多个平台的稳定通信至关重要,互联网依赖于此。