bcb中TServerSocket 多线程阻塞模式收发数据

来源:互联网 发布:javascript调用数据库 编辑:程序博客网 时间:2024/06/05 17:26
使用多线程的阻塞模式要从一个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;
    }

0 0
原创粉丝点击