使用多线程的阻塞模式要从一个TServerClientThread对象中派生一个类,在类的execute()方法中写收发数据的代码。收数据一般通过TWinSocketStream流实现。
这是派生的类的代码头
//---------------------------------------------------------------------------
#ifndef UnitServerThreadH
#define UnitServerThreadH
//---------------------------------------------------------------------------
#include <ScktComp.hpp>
#include <StdCtrls.hpp>
#include "UnitMain.h"
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
class TServerThread : public TServerClientThread
{
protected:
void __fastcall ClientExecute(void);
int __fastcall ReadStr(char * buf);
public:
__fastcall TServerThread(bool CreateSuspended, TServerClientWinSocket* ASocket,HWND hWnd);
__fastcall ~TServerThread();
private:
TWinSocketStream *pStream;
HWND m_hwnd;
};
#endif
//cpp文件
#include <vcl.h>
#pragma hdrstop
#include "UnitServerThread.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
__fastcall TServerThread::TServerThread(bool CreateSuspended, TServerClientWinSocket* ASocket,HWND hWnd) : TServerClientThread(CreateSuspended,ASocket)
{
m_hwnd=hWnd;
FreeOnTerminate=false;
}
//---------------------------------------------------------------------------
void __fastcall TServerThread::ClientExecute(void)
{//当一个客户连接的时候进入ClientExecute
//1.接收数据
try
{
pStream=new TWinSocketStream(ClientSocket,60000);
char buf[1024];
memset(buf,0,sizeof(buf));
try
{
int len=0;
if(pStream->WaitForData(60000))
{
len=pStream->Read(buf,1024);
buf[len]=0;
}
}
catch(Exception &E)
{
}
//2.发送数据
ClientSocket->SendText("已经收到消息!消息为"+AnsiString(buf));
}
__finally
{
ClientSocket->Close();
delete pStream;
}
}
这是派生的类的代码头
//---------------------------------------------------------------------------
#ifndef UnitServerThreadH
#define UnitServerThreadH
//---------------------------------------------------------------------------
#include <ScktComp.hpp>
#include <StdCtrls.hpp>
#include "UnitMain.h"
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
class TServerThread : public TServerClientThread
{
protected:
void __fastcall ClientExecute(void);
int __fastcall ReadStr(char * buf);
public:
__fastcall TServerThread(bool CreateSuspended, TServerClientWinSocket* ASocket,HWND hWnd);
__fastcall ~TServerThread();
private:
TWinSocketStream *pStream;
HWND m_hwnd;
};
#endif
//cpp文件
#include <vcl.h>
#pragma hdrstop
#include "UnitServerThread.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
__fastcall TServerThread::TServerThread(bool CreateSuspended, TServerClientWinSocket* ASocket,HWND hWnd) : TServerClientThread(CreateSuspended,ASocket)
{
m_hwnd=hWnd;
FreeOnTerminate=false;
}
//---------------------------------------------------------------------------
void __fastcall TServerThread::ClientExecute(void)
{//当一个客户连接的时候进入ClientExecute
//1.接收数据
try
{
pStream=new TWinSocketStream(ClientSocket,60000);
char buf[1024];
memset(buf,0,sizeof(buf));
try
{
int len=0;
if(pStream->WaitForData(60000))
{
len=pStream->Read(buf,1024);
buf[len]=0;
}
}
catch(Exception &E)
{
}
//2.发送数据
ClientSocket->SendText("已经收到消息!消息为"+AnsiString(buf));
}
__finally
{
ClientSocket->Close();
delete pStream;
}
}