【发布时间】:2015-10-30 13:34:09
【问题描述】:
我正在使用 c++ builder XE8,我只是一个初学者。我对德尔福一无所知。为了监听服务器端和客户端的传入数据,我从Flie->New->Other->C++ builder Files 插入了Thread Object(正如我在线程视频演示中看到的那样),并将其命名为 TSocketThreard。
在客户端,我将客户端套接字分配给 TIdIOHandlerSocket var (fsock),并使用以下代码连续侦听传入数据。 len 是 int,s 是 String var,lbox 是 TListBox。
void __fastcall TSocketThread::Execute()
{
FreeOnTerminate = True;
while(1){
if (Form1->fsock != NULL && Form1->fsock->Connected()) {
if(Form1->fsock->CheckForDataOnSource(10))
Form1->len = Form1->fsock->ReadLongInt();
Form1->s = Form1->fsock->ReadString(Form1->len);
Form1->lbox->Items->Add(Form1->s);
}
}
}
我也尝试从客户端的 onConnect 事件和按钮(我用来将客户端连接到服务器)启动它。但两次都被冻结了。
在服务器端,我尝试以相同的方式执行 OnExecute 事件。我的意思是,首先将套接字分配给一个var,将上面的代码放在线程的(我之前插入的)执行方法上,然后从onExecute事件启动线程的start()方法。对于服务器,我想让它工作在异步模式下(处理至少几百个客户端)。
我觉得我做错了,但在 c++ 中很难找到一个好的例子。请有人告诉我正确的方法。
【问题讨论】:
标签: multithreading sockets c++builder indy10