亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ddksocket.cpp

?? modbus PLC 模擬程序
?? CPP
字號:
// DDKSocket.cpp: implementation of the CDDKSocket class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif



//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////


// WSA initalized
BOOLEAN				CDDKSocket::m_wsaInitialized = FALSE;
// WSA interlocking
CRITICAL_SECTION    CDDKSocket::m_wsaCS;
CRITICAL_SECTION *	CDDKSocket::m_pwsaCS = NULL;

IMPLEMENT_DYNAMIC( CDDKSocket, CObject );
//IMPLEMENT_DYNCREATE( CDDKSocket, CObject );

CDDKSocket::CDDKSocket()
{
   m_socket = INVALID_SOCKET;
   m_serverObject = FALSE;
   // do WSA start-up
   Initialize();

   { // Create a Client socket

   }
}


CDDKSocket::CDDKSocket(DWORD timeout)
{
   m_socket = INVALID_SOCKET;
   m_serverObject = FALSE;
   // do WSA start-up
   Initialize();

   { // Create a Client socket

   }
}

// -------------------------------- CloseSocket -------------------------------
//  Close a socket
BOOL CDDKSocket::CloseSocket(BOOL gracefully /*= FALSE */, SOCKET sock/* = NULL*/)
{
SOCKET lSock;
linger lingerOpt;
int sockError=0;
   
   if (NULL == sock)
      lSock = *m_pSocket;
   else
      lSock = sock;

   if ((gracefully)&&(NULL != lSock))
   {
      // set up LINGER to do a gracefull close.
      lingerOpt.l_linger = SO_LINGER;
      lingerOpt.l_onoff = TRUE;
      sockError = setsockopt(lSock, SOL_SOCKET, SO_LINGER, (CHAR*)&lingerOpt, sizeof(lingerOpt));

      sockError = shutdown(lSock, SD_SEND ); // disable any more sends on the shut
      if (sockError)
         sockError = wsaerrno;
      if (WSAENOTSOCK == sockError+WSABASEERR)
         lSock = NULL;
      //
   }
   if (NULL != lSock)
      sockError = closesocket(lSock);
   return (TRUE);
} // CloseSocket

// -------------------------------- Initialize -------------------------------
void CDDKSocket::Initialize()
{
int errCode;
	
	// Init the WSA only once
	EnterWSA();
	if (!m_wsaInitialized)
	{
		m_wVersionRequested = MAKEWORD( 1, 1 );
		errCode = WSAStartup( m_wVersionRequested, &(m_WSAData) );
      if ( errCode != 0 )
      {
         // ? Tell the user that we could not find a usable WinSock DLL.
         OutputDebugString("Unable to find a useable WinSock DLL"); 
      }
	}
	LeaveWSA();

   // init all internal variables
	m_CallBackFuncPtr = NULL; // set the CB pointer to null
	m_listenThreadStatus  = SOCKET_EX_TERMINATED;  
	m_listenThreadCreated = FALSE;
	m_pWorkerThread       = NULL;
   memset((void * ) &(m_destSockaddr_in), 0, sizeof (m_destSockaddr_in));
   memset((void * ) &(m_localSockaddr_in), 0, sizeof (m_localSockaddr_in));
   m_socket = INVALID_SOCKET;
   m_serverBufferSize = 2048;
   m_buffer = NULL;
}


// ------------------------------- ~CDDKSocket --------------------------
CDDKSocket::~CDDKSocket()
{
   //OutputDebugString("In Base socket destructor\n");
   if (NULL!=m_socket)
   {
      OutputDebugString("Base: Client socket closing\n");
      closesocket(m_socket); //kill accepted instance immediately
   }

//	EnterWSA();
//	if (m_wsaInitialized)
//	{
//		WSACleanup();
//	}
//	LeaveWSA();
   OutputDebugString("[DEBUGSTEP]\n");
   if (NULL != m_buffer)
      delete m_buffer;
   //OutputDebugString("Leaving Base socket destructor\n");

}

#ifdef _DEBUG
VOID CDDKSocket::Dump(CDumpContext& dc) const
{
   // call the base class first
   CObject::Dump(dc);

   // dump our object to the debuggers output
   // all important members can be dumped at this stage.
   dc << "Socket: " << "\n";
} // Dump
#endif // _DEBUG


// ------------------------- SockStateChanged ----------------------------
void CDDKSocket::SockStateChanged(DWORD state)
{
   // do nothing in the base class
} // SockStateChanged

void CDDKSocket::SockDataMessage(LPCTSTR msg)
{

}

// ------------------------- SockDataDebugger ----------------------------
void CDDKSocket::SockDataDebugger(const CHAR * buffer, LONG length, BOOL transmit)
{
CString prefix, ASCIIdata;
LONG index, i;
   if (transmit)
      prefix = "TX:";
   else
      prefix = "RX:";
   index = 0;
   while (index < length)
   {
      i=0;
      OutputDebugString("\n");
      OutputDebugString(prefix);
      while ((index+i < length)&&(i<8))
      {
         ASCIIdata.Format("%02X", buffer[index+i]);
         OutputDebugString(ASCIIdata);
         i++;
      }
      index +=8;
   }
} // SockDataDebugger

// --------------------------------- GetSockError -------------------------
void CDDKSocket::GetSockError(CHAR * errString, BOOL reset/*=true*/)
{
LONG wx = wsaerrno;

   sprintf(errString,sys_wsaerrlist[wx]);
    if (reset) WSASetLastError(0);
} // GetSockError

// -------------------------------- EnterWSA -------------------------------
void CDDKSocket::EnterWSA()
{
   // If the critical section has not been instantiated,
   // instantiate and initialize and enter
   if( NULL != m_pwsaCS)
      EnterCriticalSection(m_pwsaCS);
   else
   {
      m_pwsaCS = &m_wsaCS;
      InitializeCriticalSection(m_pwsaCS);
      EnterCriticalSection(m_pwsaCS);
   }
} // EnterWSA


// -------------------------------- LeaveWSA -------------------------------
void CDDKSocket::LeaveWSA()
{
	LeaveCriticalSection(m_pwsaCS);
}



// --------------------------- Recieve -------------------------------
LONG CDDKSocket::Recieve(SOCKET ackSock, //The accepted socket
                           int    numberOfBytesToRead,// -> number of bytes to read.
                           CHAR * BufferPtr,       //<- Data read from socket    
                           CHAR * debugStrPtr       //Any errors 
                          )
{
//returns -1 if error, or the number actualy read from socket
int numread;
int temp;
//CHAR   buf[1000];
//CHAR * buffPtr = buf;

//memset(buf,3,sizeof(buf));

   
   //call recv func
   int check1 = 0x1234;
   numread =  recv(ackSock,                    // Our precious socket
                   BufferPtr,//buffPtr,                  // RxBuffer 
                   (INT) numberOfBytesToRead,
                   (INT) NULL                  // no fancy flaggies
                  ); 
   int check2 = 0x5678;

   if (numread != 0xffffffff)
      SockDataDebugger(BufferPtr, numread, FALSE);// a leettel debugger msg

   //on sock_error
   if (SOCKET_ERROR == numread) 
   {
      m_socketStatus = SOCKET_UNHEALTHY;
      temp = wsaerrno;
      (temp >= 0) ? (sprintf(debugStrPtr, "Read Error on Listen socket : %s\n",sys_wsaerrlist[temp]))
                     : (sprintf(debugStrPtr, "Unknown Read error on Listen socket\n"));
      WSASetLastError(0);
      OutputDebugString(debugStrPtr);
      CloseSocket(TRUE, ackSock);
      return(-1);
   }
   //on mismatch
   if (numread != numberOfBytesToRead)
   {
       m_socketStatus = SOCKET_UNHEALTHY;
       sprintf(debugStrPtr, "Read Timeout (%ld/%ld) ", numread,numberOfBytesToRead);
       OutputDebugString(debugStrPtr);
       return(numread);
       //I expect the caller to initiatate retries or whatever!
   }
   else
      m_socketStatus = SOCKET_HEALTHY;
   return(numread);
}

// --------------------------- Send -------------------------------
LONG CDDKSocket::Send(SOCKET ackSock, //The accepted socket
                           int    numberOfBytesToWrite,// -> number of bytes to write
                           CHAR * BufferPtr,       //<- Data read from socket    
                           CHAR * debugStrPtr       //Any errors 
                          )
{
//returns -1 if error, or the number actualy read from socket
int temp;
int numberOfBytesWritten; 

   numberOfBytesWritten = send(ackSock,
                               BufferPtr,
                               (INT) numberOfBytesToWrite,
                               (INT) NULL
                              );
   if (SOCKET_ERROR == numberOfBytesWritten) 
   {
      // We have a socket transmit error, so time to start counting down to a socket reset
      numberOfBytesWritten = 0;
      m_socketStatus = SOCKET_UNHEALTHY;
      temp = wsaerrno;
      (temp >= 0) ? (sprintf(debugStrPtr, "Write Error on Listen socket : %s\n",sys_wsaerrlist[temp]))
                     : (sprintf(debugStrPtr, "Unknown Write error on Listen socket\n"));
      WSASetLastError(0);
      OutputDebugString(debugStrPtr);
      return(-1);
   }

   // a leettel debugger msg
   SockDataDebugger(BufferPtr, numberOfBytesWritten, TRUE);
   //on mismatch
   if (numberOfBytesWritten != numberOfBytesToWrite)
   {
       m_socketStatus = SOCKET_UNHEALTHY;
       sprintf(debugStrPtr, "Write Timeout (%ld/%ld) ", numberOfBytesToWrite,numberOfBytesToWrite);
       //OutputDebugString(debugStrPtr);
       //I expect the caller to initiatate retries or whatever!
   }
   else
      m_socketStatus = SOCKET_HEALTHY;
   return(numberOfBytesWritten);
} // Send

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品视频网站| 另类小说色综合网站| 懂色中文一区二区在线播放| 欧美大片国产精品| 日av在线不卡| 日韩一区二区三区免费观看| 午夜影视日本亚洲欧洲精品| 欧美亚洲国产怡红院影院| 亚洲女同ⅹxx女同tv| 成人h动漫精品一区二| 亚洲国产精品传媒在线观看| 国产永久精品大片wwwapp| 精品国产亚洲一区二区三区在线观看 | 成人免费视频一区二区| 亚洲精品在线观看视频| 亚洲午夜一二三区视频| 欧美性生活久久| 亚洲一区二区三区三| 欧美色手机在线观看| 亚洲va天堂va国产va久| 欧美性高清videossexo| 午夜精品久久一牛影视| 欧美精品一卡两卡| 欧美aaaaaa午夜精品| 欧美成人精精品一区二区频| 国产一区二区0| 国产婷婷色一区二区三区四区| 国产高清久久久| 中文子幕无线码一区tr| 91免费在线视频观看| 亚洲精品日韩综合观看成人91| 欧美性猛交xxxxxxxx| 美女网站一区二区| 久久久久久亚洲综合| 不卡的av网站| 有码一区二区三区| 正在播放一区二区| 久久99国产精品成人| 中文字幕成人网| 99精品在线观看视频| 1000精品久久久久久久久| 在线看不卡av| 蜜桃视频免费观看一区| 久久久久久黄色| 97国产一区二区| 亚洲成人中文在线| 欧美精品一区二区不卡 | 成人午夜伦理影院| 亚洲国产精品高清| 欧美伊人久久大香线蕉综合69| 日韩成人免费电影| 久久久精品免费免费| 成人高清免费观看| 一二三区精品视频| 在线中文字幕一区二区| 美女视频网站久久| 国产在线国偷精品产拍免费yy| 国产精品久久久久久久久免费樱桃 | 国产一区二区在线免费观看| 国产精品免费看片| 欧美日韩一区二区三区在线 | 精品午夜一区二区三区在线观看| 中文字幕av一区二区三区高| 在线观看日韩av先锋影音电影院| 久久精品999| 最新不卡av在线| 欧美丰满嫩嫩电影| 成人少妇影院yyyy| 午夜精品国产更新| 中文字幕一区二区三区四区不卡 | 成人一级片网址| 亚洲福利一区二区三区| 久久午夜羞羞影院免费观看| 欧美三级日本三级少妇99| 国产一区二区三区视频在线播放| 一区二区在线观看av| 欧美电视剧在线看免费| 在线免费视频一区二区| 国产一区二区三区久久悠悠色av| 一区二区三区蜜桃网| 久久伊人中文字幕| 在线电影院国产精品| 99久久99久久综合| 久久69国产一区二区蜜臀| 亚洲综合久久av| 欧美激情在线看| 欧美一二三在线| 91福利国产精品| 成人福利视频在线| 国模无码大尺度一区二区三区| 亚洲一卡二卡三卡四卡| 欧美国产日韩精品免费观看| 日韩免费看的电影| 在线观看精品一区| 成人18视频在线播放| 国内精品视频666| 日一区二区三区| 亚洲一区二区成人在线观看| 国产精品免费视频网站| 久久久精品免费免费| 欧美一区二区黄| 欧美日韩国产在线播放网站| av电影在线观看不卡| 激情五月婷婷综合| 日韩精品成人一区二区三区| 亚洲午夜视频在线| 亚洲欧美日韩人成在线播放| 国产女人aaa级久久久级 | 亚洲欧洲性图库| 久久亚洲私人国产精品va媚药| 欧美一级xxx| 欧美美女视频在线观看| 欧美丝袜自拍制服另类| 99热精品国产| 成人禁用看黄a在线| 国内精品视频一区二区三区八戒| 久久99国内精品| 日韩主播视频在线| 性欧美疯狂xxxxbbbb| 樱桃视频在线观看一区| 一区二区三区四区在线播放| 亚洲欧美激情视频在线观看一区二区三区 | 欧美日韩中文另类| 日本高清不卡视频| 99精品一区二区三区| 99久久99久久久精品齐齐| 成人不卡免费av| 成人av资源网站| 成人亚洲精品久久久久软件| 国产成人综合自拍| 国产高清不卡一区| 国产乱码精品一区二区三区忘忧草 | 久久99精品久久久久| 麻豆传媒一区二区三区| 免费在线观看精品| 日本最新不卡在线| 久久精品国产77777蜜臀| 久久爱另类一区二区小说| 狠狠色2019综合网| 国产精品亚洲综合一区在线观看| 国内精品久久久久影院薰衣草| 国产主播一区二区三区| 国产99精品视频| 成人爱爱电影网址| 色婷婷综合激情| 欧美久久高跟鞋激| 91精品国产色综合久久不卡蜜臀| 日韩一级视频免费观看在线| 日韩欧美一区二区不卡| 久久免费午夜影院| 亚洲国产精品黑人久久久| 亚洲欧美另类综合偷拍| 亚洲一级二级在线| 日本va欧美va精品发布| 国产在线精品免费av| 日韩精品中文字幕在线不卡尤物| 2023国产精品视频| 欧美精品一区二区三区在线| 久久日韩精品一区二区五区| 中文欧美字幕免费| 亚洲综合一区二区三区| 免费人成在线不卡| 国产一区二区三区蝌蚪| 99久久99久久综合| 欧美亚洲综合网| 日韩一区二区三区电影| 久久久久久久久久久99999| 亚洲欧美一区二区视频| 亚洲一区免费视频| 久久精品国产免费| av一区二区三区黑人| 欧美少妇性性性| 久久综合狠狠综合久久激情| 国产精品成人免费在线| 婷婷综合在线观看| 国产一区二区中文字幕| 色综合天天天天做夜夜夜夜做| 欧美久久婷婷综合色| 久久亚洲一级片| 亚洲图片另类小说| 奇米在线7777在线精品| 成人黄色大片在线观看| 欧美日韩精品一二三区| 国产亚洲福利社区一区| 亚洲国产综合人成综合网站| 国产一区二区三区免费| 精品视频色一区| 日本一区二区免费在线观看视频| 亚洲一区二区欧美| 国产精品一二一区| 欧美日韩一卡二卡| 国产午夜精品理论片a级大结局| 亚洲一区视频在线观看视频| 国内偷窥港台综合视频在线播放| 在线影院国内精品| wwwwxxxxx欧美| 视频一区二区国产| 91丝袜国产在线播放| xfplay精品久久| 亚洲超丰满肉感bbw|