Ученик-кочегар
Группа: Участник
Сообщений: 5
|
Требуется написать ТСР сервер с отдельными потоками для каждого клиента или для каждого соединения. Клиенты (до 16-ти) посылают пакеты по 23 байта 180 раз в секунду. Использую ServerSocket, получаю соединение, адрес клиента, но до чтения дойти не могу: не попадаю в SocketEvent для чтения.
Помогите, кто чем может.
Основной модуль
CODE |
#include <vcl.h>
#include "Main.h"
#include "MonitorThread.h"
//---------------------------------------------------------------------------
__fastcall TfmMain::TfmMain(TComponent* Owner)
: TForm(Owner)
{
ServerSocket->Open();
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::ServerSocketGetThread(TObject *Sender,
TServerClientWinSocket *ClientSocket,
TServerClientThread *&SocketThread)
{
SocketThread = (TServerClientThread*)new TMonitorThread(false,ClientSocket);
}
//---------------------------------------------------------------------------
|
Thread объект
CODE |
#include "MonitorThread.h"
//---------------------------------------------------------------------------
__fastcall TMonitorThread::TMonitorThread(bool CreateSuspended, TServerClientWinSocket* ASocket)
: TServerClientThread(CreateSuspended,ASocket)
{
ASocket->OnSocketEvent = SocketEvent;
FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
void __fastcall TMonitorThread::Execute(void)
{
int len;
if(ClientSocket != NULL)
{
len = ClientSocket->ReceiveLength();
}
}
//---------------------------------------------------------------------------
void __fastcall TMonitorThread::SocketEvent(TObject* Sender, TCustomWinSocket* Socket, TSocketEvent SocketEvent)
{
int len;
if(SocketEvent == seRead)
len = Socket->ReceiveLength();
}
//---------------------------------------------------------------------------
| |