ClientSocket 应用于多线程的问题。
做一个测试软件模拟多个客户端连接到服务器端,客户端采用多线程处理方式。
实现方式 :在线程中定义TClientSocket * FClientSocket;
TWinSocketStream* FSocketStream;
unsigned char FAcceptBuff[500];
unsigned char FSendBuff[200];
线程构造函数中初始化上面的对象
{
FClientSocket = new TClientSocket(NULL); //
FSocketStream = new TWinSocketStream(FClientSocket,1000);
memset(FAcceptBuff,00,500);
memset(FSendBuff,00,200);
FClientSocket ... 设置阻赛,端口,主IP,并打开连接
}
在OnExecute 中
while ((!Terminated)&& FClientSocket->Active)
{
Sleep(30);
if (FSocketStream->WaitForData(100))
{
//---------------问题出现在下面
/* 如果创建一个线程正常,如果创建多个线程则出现
... read error 64,指定的网络名不再可用。 ...
查找相关内容是说相关连接已经关闭。
各位大侠帮忙解释一下,什么原因,如何造成的,如何解决呢??
*/
RecvLen = FSocketStream->Read(FAcceptBuff,500);
//----------------
if ( RecvLen > 0)
{
FAcceptDataCount++; //计数
ReadSocket(FAcceptBuff,RecvLen); //接收缓冲区处理缓冲区数据
FMessage.LParamHi = FAcceptDataCount; //消息通知主线程
FMessage.LParamLo = FSendDataCount;
PostMessage(FMainHandle,CCMESSAGE,(unsigned int)FThreadID,FMessage.LParam);
}
}
}
/* 如果创建一个线程正常,如果创建多个线程则出现
... read error 64,指定的网络名不再可用。 ...
查找相关内容是说相关连接已经关闭。
各位大侠帮忙解释一下,什么原因,如何造成的,如何解决呢??
*/