我目前正在尝试将我的客户端与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);
答案 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
事件的唯一方法是:
你在TIdTCPServer::OnConnect
事件中使线程死锁,例如做一些非线程安全的事情。或者,你正在做一些事情,导致抛出异常,你没有抓住它。未捕获的异常将终止该线程。
客户端在TIdTCPServer::OnConnect
事件处理程序仍在运行时断开连接,或者在事件处理程序退出之后和第一次调用TIdTCPServer::OnExecute
事件处理程序之前的时间之间断开连接。 / p>
甚至可以为客户端使用另一个库而不是服务器正在使用?
当然有可能。 TCP是标准化的传输协议。只要不同的TCP实现符合标准,它们就可以毫无问题地相互通信。这对于跨多个平台的稳定通信至关重要,互联网依赖于此。