34 auto funcServer = [](LPVOID lpvParam)->DWORD {
DriveTcpServer ();
return 0; };
35 auto funcProxy = [](LPVOID lpvParam)->DWORD {
DriveTcpProxy ();
return 0; };
36 auto funcClient = [](LPVOID lpvParam)->DWORD {
DriveTcpClient ();
return 0; };
38 threadServer.
Create (funcServer);
39 threadServer.
Create (funcProxy);
40 threadServer.
Create (funcClient);
49 _tprintf (_T (
"DriveTcpServer() IN.\n"));
57 _tprintf (_T (
"IPAddressの指定が見つかりません。\n"));
64 _tprintf (_T (
"Portの指定が見つかりません。\n"));
68 auto object = std::make_unique<TcpServer> ();
73 object->Init (ipAddress.
Ctr (), wPort);
77 _tprintf (_T (
"DriveTcpServer() OUT.\n"));
82 _tprintf (_T (
"DriveTcpClient() IN.\n"));
92 _tprintf (_T (
"Not found IPAddress.\n"));
99 _tprintf (_T (
"Not found Port.\n"));
108 bool kickOff = kickOffValue == 1 ? true :
false;
110 auto object = std::make_unique<TcpClient> ();
116 object->Start (ipAddress.
Ctr (), wPort, retryInterval, retryCount, kickOff);
118 _tprintf (_T (
"DriveTcpClient() OUT.\n"));
123 _tprintf (_T (
"DriveTcpProxy() IN.\n"));
134 _tprintf (_T (
"ServerAddressの指定が見つかりません。\n"));
141 _tprintf (_T (
"ClientAddressの指定が見つかりません。\n"));
146 if (wServerPort == 0)
148 _tprintf (_T (
"ServerPortの指定が見つかりません。\n"));
153 if (wClientPort == 0)
155 _tprintf (_T (
"ClientPortの指定が見つかりません。\n"));
159 auto object = std::make_unique<TcpProxy> ();
160 object->Init (ClientAddress.
Ctr (), wClientPort, ServerAddress.
Ctr (), wServerPort);
163 _tprintf (_T (
"DriveTcpProxy() OUT.\n"));
170 _tprintf (_T (
"DriveTcpServerConsoleHandler(%d) IN.\n"), dwType);
189 _tprintf (_T (
"DriveTcpServerConsoleHandler(%d) OUT.\n"), dwType);
195 _tprintf (_T (
"DriveTcpProxyConsoleHandler(%d) IN.\n"), dwType);
214 _tprintf (_T (
"DriveTcpProxyConsoleHandler(%d) OUT.\n"), dwType);
220 _tprintf (_T (
"DriveTcpClientConsoleHandler(%d) IN.\n"), dwType);
239 _tprintf (_T (
"DriveTcpClientConsoleHandler(%d) OUT.\n"), dwType);
249 FillMemory (byData,
sizeof (byData),
'X');
251 wsprintfA ((LPSTR)byData,
"%02d/%02d/%02d %02d:%02d:%02d.%03d_",
252 t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute,
253 t.wSecond, t.wMilliseconds);
264void DumpData (LPCTSTR lpctszFrom,
int direction, BYTE byData[],
int iDataLen)
267 (direction == 0 ? _T (
" Down:(%04d)") : _T (
" Up :(%04d)"));
269 _tprintf (lpctszFrom);
270 _tprintf (lpctszMsg, iDataLen);
273 _tprintf (_T (
"%02X "), byData[i]);
275 _tprintf (_T (
"|| "));
278 _tprintf (_T (
"%c"), byData[i]);
280 _tprintf (_T (
"\n"));
287 _tprintf (_T (
"ServerWorker::ServerWorker(TcpConnector*) IN.\n"));
293 _tprintf (_T (
"ServerWorker::ServerWorker(TcpConnector*) OUT.\n"));
305 _tprintf (_T (
"ServerWorker::~ServerWorker() IN.\n"));
313 _tprintf (_T (
"ServerWorker::~ServerWorker() OUT.\n"));
318 _tprintf (_T (
"ServerWorker::Start() CALL.\n"));
325 _tprintf (_T (
"ServerWorker::Stop() CALL.\n"));
332 _tprintf (_T (
"ServerWorker::Invoke() IN.\n"));
337 while (
_stop ==
false)
342 _tprintf (_T (
"ServerWorker::Invoke() recvSize=%d recv() failed. reason:%d\n"),
348 DumpData (_T (
"SVR"), 1, byData, recvSize);
350 _tprintf (_T (
"%s %d\r"), _T (
"SVR"), count++);
354 if (sendSize != recvSize)
356 _tprintf (_T (
"send=%d sended=%d send failed. reason:%d\n"),
362 _tprintf (_T (
"ServerWorker::Invoke() OUT.\n"));
370 _tprintf (_T (
"TcpServer::TcpServer() IN.\n"));
376 _tprintf (_T (
"TcpServer::TcpServer() OUT.\n"));
381 _tprintf (_T (
"TcpServer::~TcpServer() IN.\n"));
388 _tprintf (_T (
"TcpServer::~TcpServer() OUT.\n"));
393 _tprintf (_T (
"TcpServer::Init(%s, %d) IN.\n"), lpctszIP, wPort);
399 _tprintf (_T (
"TcpServer::Init(%s, %d) OUT.\n"), lpctszIP, wPort);
405 _tprintf (_T (
"TcpServer::Start() CALL.\n"));
412 _tprintf (_T (
"TcpServer::Wait() CALL.\n"));
419 _tprintf (_T (
"TcpServer::Stop() IN.\n"));
429 _tprintf (_T (
"TcpServer::Stop() OUT.\n"));
434 _tprintf (_T (
"TcpServer::Invoke(LPVOID) IN.\n"));
436 while (
_stop ==
false)
441 _tprintf (_T (
" _build->Wait() success.\n"));
451 _tprintf (_T (
" _builder->Wait() failed. reason=%d\n"),
_builder->
GetErrNo ());
456 _tprintf (_T (
"TcpServer::Invoke(LPVOID) stop detected.\n"));
465 _tprintf (_T (
"TcpServer::Invoke(LPVOID) worker->Stop() called.\n"));
471 _tprintf (_T (
"TcpServer::Invoke(LPVOID) worker deleted.\n"));
473 _tprintf (_T (
"TcpServer::Invoke(LPVOID) OUT.\n"));
481 _tprintf (_T (
"TcpClient::TcpClient() IN.\n"));
488 _tprintf (_T (
"TcpClient::TcpClient() OUT.\n"));
493 _tprintf (_T (
"TcpClient::~TcpClient() IN.\n"));
502 _tprintf (_T (
"TcpClient::~TcpClient() OUT.\n"));
507 _tprintf (_T (
"TcpClient::Init() CALL.\n"));
512bool TcpClient::Start (LPCTSTR lpctszIP, USHORT wPort,
int retryInterval,
int retryCount,
bool kickOff)
514 _tprintf (_T (
"TcpClient::Start(IP:%s, Port:%d, RetryInterval:%d, RetryCount:%d) IN.\n"),
515 lpctszIP, wPort, retryInterval, retryCount);
529 if ((DWORD)ret != dwDataLen)
531 _tprintf (_T (
"TcpClient::Start() Send() invalid send size (%d). reason=%d \n"), ret,
_connector->
GetErrNo ());
539 _tprintf (_T (
"TcpClient::Start(IP:%s, Port:%d, RetryInterval:%d, RetryCount:%d) OUT.\n"),
540 lpctszIP, wPort, retryInterval, retryCount);
546 _tprintf (_T (
"TcpClient::Stop() CALL.\n"));
553 _tprintf (_T (
"TcpClient::Invoke(LPVOID) IN.\n"));
558 while (
_stop ==
false)
563 _tprintf (_T (
"TcpClient::Invoke(LPVOID) recvSize=%d Socket disconnected. reason:%d\n"),
568 DumpData (_T (
"CLT"), 0, byData, recvSize);
570 _tprintf (_T (
"%s %d\r"), _T (
"CLT"), count++);
575 if (sendSize != dataLen)
577 _tprintf (_T (
"TcpClient::Invoke(LPVOID) send=%d sended=%d Invalid send size. reason:%d\n"),
583 _tprintf (_T (
"TcpClient::Invoke(LPVOID) OUT.\n"));
618bool TcpProxy::Init (LPCTSTR lpctszClientIP, USHORT wClientPort, LPCTSTR lpctszServerIP, USHORT wServerPort)
640 HANDLE handles[2]{ INVALID_HANDLE_VALUE, INVALID_HANDLE_VALUE };
644 ::WaitForMultipleObjects (2, handles, FALSE, INFINITE);
664 _tprintf (_T (
"Down:recvSize=%d Socket disconnected. reason:%d\n"),
670 DumpData (_T (
"PXY"), 1, byData, recvSize);
672 _tprintf (_T (
"%s %d\r"), _T (
"PXY"), count++);
676 if (sendSize != recvSize)
678 _tprintf (_T (
"Down:send=%d sended=%d Invalid send size. reason:%d\n"),
697 _tprintf (_T (
"Up :recvSize=%d Socket disconnected. reason:%d\n"),
703 DumpData (_T (
"PXY"), 0, byData, recvSize);
705 _tprintf (_T (
"%s %d\r"), _T (
"PXY"), count++);
709 if (sendSize != recvSize)
711 _tprintf (_T (
"Up :send=%d sended=%d Invalid send size. reason:%d\n"),
alt::TcpConnector * _connectorClient
void SetTcpClient(alt::TcpConnector *connector)
alt::TcpConnector * _connectorServer
virtual DWORD Invoke(LPVOID lpvParam)
コールバック関数プレースホルダ
void SetTcpServer(alt::TcpConnector *connector)
alt::TcpConnector * _connector
virtual DWORD Invoke(LPVOID lpvParam)
コールバック関数プレースホルダ
alt::TcpConnector * _connector
bool Start(LPCTSTR lpctszIP, USHORT wPort, int retryCount, int retryInterval, bool kickOff)
virtual DWORD Invoke(LPVOID lpvParam)
コールバック関数プレースホルダ
alt::SocketBuilder * _builder
alt::Thread * _threadDownstream
alt::SocketBuilder * _builderClient
UpstreamDriver * _driverUpstream
bool Init(LPCTSTR lpctszClientIP, USHORT wClientPort, LPCTSTR lpctszServerIP, USHORT wServerPort)
alt::TcpConnector * _connectorServer
alt::Thread * _threadUpstream
DownstreamDriver * _driverDownstream
alt::SocketBuilder * _builderServer
alt::TcpConnector * _connectorClient
virtual DWORD Invoke(LPVOID lpvParam)
コールバック関数プレースホルダ
alt::SocketBuilder * _builder
alt::skeleton::Array< ServerWorker > _workerHolder
bool Init(LPCTSTR lpctszIP, USHORT wPort)
alt::TcpConnector * _connectorServer
void SetTcpServer(alt::TcpConnector *connector)
alt::TcpConnector * _connectorClient
void SetTcpClient(alt::TcpConnector *connector)
virtual DWORD Invoke(LPVOID lpvParam)
コールバック関数プレースホルダ
HANDLE APIENTRY GetHandle() const
継承先はこの関数でハンドルを取得します。
BOOL APIENTRY Close()
使用しなくなったハンドルはこれでクローズします。
ソケットに関するWindowsAPIを集約したクラス
int APIENTRY Startup()
Windowsソケットの使用準備
BOOL APIENTRY Prepare(u_short portNo, LPCTSTR lpctszIpAddr=NULL)
TCPポートのlisten(),accept()の準備
TcpConnector *APIENTRY CreateTcpConnector(LPCTSTR lpctszIpAddr, u_short portNo, int retryInterval, int retryCount)
TcpConnectorの作成
TcpConnector *APIENTRY Wait()
TCP接続のlisten(),accept()待機関数
DWORD APIENTRY GetErrNo() const
WinSock API呼び出し時にエラーとなった時、 エラーの詳細を返します。
int APIENTRY Close()
ソケットが使用されていた場合、クローズします。
BOOL APIENTRY SetKeepAliveValue(ULONG onoff, ULONG time, ULONG interval) const
KeepAlive送出タイミング、間隔をセッション個別に設定します。
文字列に関するWindowsAPIを集約したクラス
LPCTSTR APIENTRY Ctr() const
内部で確保している文字列ポインタを取得します。
LPTSTR APIENTRY Ptr() const
内部で確保している文字列ポインタを取得します。
TCP通信に関するWindowsAPIを集約したクラス
INT APIENTRY Recv(LPVOID lpvBuf, DWORD dwSize, BOOL isBlocking=TRUE)
TCP受信処理
INT APIENTRY Send(LPVOID lpvBuf, DWORD dwSize) const
TCP送信処理
スレッドに関するWindowsAPIを集約したクラス
BOOL APIENTRY Create(PTHREAD_START_ROUTINE function=NULL, LPVOID lpvParam=NULL, DWORD dwCreationFlag=0)
スレッドを作成します。
DWORD APIENTRY Wait(DWORD dwWaitTime=INFINITE) const
シグナル状態になるとブロックを解除します。
Threadクラスのスレッド実行関数を設定します。