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

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

?? winsocket.cpp

?? WinSock Win32 API 的打包類和例子程序 < WinSock > winSocket/winSocketEx: 如果你正在Windows環境中用C++編寫TCP/I
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*******************************************
 *   winSocket.cpp - Implementation of     * 
 *   winSocket Winsock API wrapper class   *
 *    Ryan Lederman ryan@winprog.org       *
 *            January 2002                 *
 *          THIS CODE IS FREE              *
 *                                         *
 *******************************************/

#include "winSocket.h"

winSocket::winSocket() : m_hSocket(0),
                         m_wVersion(0),
                         m_ErrorNumber(0)		
{
	WSADATA wsaD;	// Structure initialsed by WSAStartup
	m_wVersion = MAKEWORD(2,2);	// Version number requested

	memset( m_LastError, 0, ERR_MAXLENGTH );	// Nullify last error
	memset( &m_sockaddr, 0, sizeof( m_sockaddr ) );	// Nullify structures
	memset( &m_rsockaddr, 0, sizeof( m_rsockaddr ) );

	int result = WSAStartup( m_wVersion, &wsaD );	// Initialize Winsock
	
	if( result != 0 ) // WSAStartup failed
	{
        set_LastError( "WSAStartup failed!", WSAGetLastError() );
        return;
	}
}

winSocket::~winSocket() { WSACleanup();	/* Un-initialise Winsock*/ }

int winSocket::Create( void )
{
	/**************************************
	* FUNCTION: Create                    *
	*                                     *
	* PURPOSE: Initializes the underlying *
	* SOCKET object for the class.        *           
	*                                     * 
	* RETURNS: ERR_WSAERROR upon error,   *                 
	* otherwise ERR_SUCCESS               *   
	*                                     *
	***************************************/

	if ( (m_hSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP )) == INVALID_SOCKET )
	{
        set_LastError( "socket() failed", WSAGetLastError() );
        return ERR_WSAERROR;
	}

	return ERR_SUCCESS;	
}

int winSocket::Close( void )
{
	/****************************************
	* FUNCTION: Close                       *
	*                                       *
	* PURPOSE: Closes the underlying        *
	* SOCKET object. Does not destroy class *           
	*                                       * 
	* RETURNS: ERR_WSAERROR upon error,     *                  
	* otherwise ERR_SUCCESS                 *   
	*                                       *
	*****************************************/

	if ( closesocket( m_hSocket ) == SOCKET_ERROR )
	{
        set_LastError( "closesocket() failed", WSAGetLastError() );
        return ERR_WSAERROR;
	}

	memset( &m_sockaddr, 0, sizeof( sockaddr_in ) );
	memset( &m_rsockaddr, 0, sizeof( sockaddr_in ) );

	return ERR_SUCCESS;
}

int winSocket::Connect( char* strRemote, unsigned int iPort )
{
	/*****************************************
	* FUNCTION: Connect                      *
	*                                        *
	* PURPOSE: Establishes TCP/IP connection *
	* with remote host (strRemote) on port   *     
	* # (iPort)                              *
	*                                        *
	* RETURNS: ERR_BADPARAM for invalid      *
	* parameters, ERR_WSAERROR upon error,   *
	* otherwise ERR_SUCCESS                  *
	*                                        *
	******************************************/

	if( strlen( strRemote ) == 0 || iPort == 0 )
		return ERR_BADPARAM;

	hostent *hostEnt = NULL;
	long lIPAddress = 0;

	hostEnt = gethostbyname( strRemote );

	if( hostEnt != NULL )
	{
		lIPAddress = ((in_addr*)hostEnt->h_addr)->s_addr;
		m_sockaddr.sin_addr.s_addr = lIPAddress;
	}
	else
	{
		m_sockaddr.sin_addr.s_addr = inet_addr( strRemote );
	}

	m_sockaddr.sin_family = AF_INET;
	m_sockaddr.sin_port = htons( iPort );

	if( connect( m_hSocket, (SOCKADDR*)&m_sockaddr, sizeof( m_sockaddr ) ) == SOCKET_ERROR )
	{
        set_LastError( "connect() failed", WSAGetLastError() );
        return ERR_WSAERROR;
	}

	return ERR_SUCCESS;
}

int winSocket::Listen( int iQueuedConnections )
{
	/*****************************************
	* FUNCTION: Listen                       *
	*                                        *
	* PURPOSE: Places the SOCKET in the      *
	* listening state. Requires that Bind()  *
	* be called previously.                  *
	*                                        *
	* RETURNS: ERR_BADPARAM for invalid      *
	* parameters, ERR_WSAERROR upon error,   *
	* otherwise ERR_SUCCESS                  *
	*                                        *
	******************************************/

	if( iQueuedConnections == 0 )
		return ERR_BADPARAM;

	if( listen( m_hSocket, iQueuedConnections ) == SOCKET_ERROR )
	{
        set_LastError( "listen() failed", WSAGetLastError() );
        return ERR_WSAERROR;
	}

	return ERR_SUCCESS;
}

int winSocket::Send( SOCKET s, char* strData, int iLen )
{
	/**********************************************
	* FUNCTION: Send                              *
	*                                             *
	* PURPOSE: Sends data (strData) to remote     *
	* side on socket s.                           *
	*                                             *
	* RETURNS: ERR_BADPARAM for invalid           *
	* parameters, ERR_WSAERROR upon error,        *
	* otherwise ERR_SUCCESS                       *
	*                                             *
	***********************************************/

	if( strData == NULL || iLen == 0 )
		return ERR_BADPARAM;

	if( send( s, strData, iLen, 0 ) == SOCKET_ERROR )
	{
        set_LastError( "send() failed", WSAGetLastError() );
        return ERR_WSAERROR;
	}
	
	return ERR_SUCCESS;
}

int winSocket::Send( char* strData, int iLen )
{
	/**********************************************
	* FUNCTION: Send                              *
	*                                             *
	* PURPOSE: Sends data (strData) to remote     *
	* side on an established TCP/IP connection.   *
	* Requires that Connect be called previously. *
	*                                             *
	* RETURNS: ERR_BADPARAM for invalid           *
	* parameters, ERR_WSAERROR upon error,        *
	* otherwise ERR_SUCCESS                       *
	*                                             *
	***********************************************/

	if( strData == NULL || iLen == 0 )
		return ERR_BADPARAM;

	if( send( m_hSocket, strData, iLen, 0 ) == SOCKET_ERROR )
	{
        set_LastError( "send() failed", WSAGetLastError() );
        return ERR_WSAERROR;
	}
	
	return ERR_SUCCESS;
}

int winSocket::Receive( SOCKET s, char* strData, int iLen )
{
	/***********************************************
	* FUNCTION: Receive                            *
	*                                              *
	* PURPOSE: Retreives data from incoming queue  *
	* and copies to (strData). (iLen) will contain *
	* the length of data read in bytes             *
	*                                              *
	* RETURNS: ERR_BADPARAM for invalid            *
	* parameters, ERR_WSAERROR upon error,         *
	* otherwise passes what recv() returns.        *
	*                                              *
	***********************************************/

	if( strData == NULL )
		return ERR_BADPARAM;

	int len = 0;
	int ret = 0;
	
	ret = recv( s, strData, iLen, 0 );

	if ( ret == SOCKET_ERROR )
	{
        set_LastError( "recv() failed", WSAGetLastError() );
        return ERR_WSAERROR;
	}
	return ret;
}

int winSocket::Receive( char* strData, int iLen )
{
	/***********************************************
	* FUNCTION: Receive                            *
	*                                              *
	* PURPOSE: Retreives data from incoming queue  *
	* and copies to (strData). (iLen) will contain *
	* the length of data read in bytes             *
	*                                              *
	* RETURNS: ERR_BADPARAM for invalid            *
	* parameters, ERR_WSAERROR upon error,         *
	* otherwise passes what recv() returns.        *
	*                                              *
	***********************************************/

	if( strData == NULL )
		return ERR_BADPARAM;

	int len = 0;
	int ret = 0;
	
	ret = recv( m_hSocket, strData, iLen, 0 );

	if ( ret == SOCKET_ERROR )
	{
        set_LastError( "recv() failed", WSAGetLastError() );
        return ERR_WSAERROR;
	}

	return ret;
}

int winSocket::Bind( char* strIP, unsigned int iPort )
{
	/************************************************
	* FUNCTION: Bind                                *
	*                                               *
	* PURPOSE: Associates the SOCKET object with an *
	* IP address (strIP) and port number (iPort)    *
	*                                               *
	* RETURNS: ERR_BADPARAM for invalid             *
	* parameters, ERR_WSAERROR upon error,          *
	* otherwise ERR_SUCCESS                         *
	*                                               *
	************************************************/

	if( strlen( strIP ) == 0 || iPort == 0 )
		return ERR_BADPARAM;

	memset( &m_sockaddr,0, sizeof( m_sockaddr ) );
	m_sockaddr.sin_family = AF_INET;
	m_sockaddr.sin_addr.s_addr = inet_addr( strIP );
	m_sockaddr.sin_port = htons( iPort );

	if ( bind( m_hSocket, (SOCKADDR*)&m_sockaddr, sizeof( m_sockaddr ) ) == SOCKET_ERROR )
	{
        set_LastError( "bind() failed", WSAGetLastError() );
        return ERR_WSAERROR;
	}
	return ERR_SUCCESS;
}

int winSocket::Accept( SOCKET s )
{	
	/***************************************************
	* FUNCTION: Accept                                 *
	*                                                  *
	* PURPOSE: Initializes the SOCKET object (if not   *
	* previously initialized), associates the SOCKET   *
	* object with the IP address and port of the       *
	* remote side, and accepts an incoming connection. *
	* Usually called from a Window Procedure using     *
	* wParam as the argument.                          *
	*                                                  *
	* RETURNS: ERR_WSAERROR upon error,                *
	* otherwise ERR_SUCCESS                            *
	*                                                  *
	****************************************************/

	int Len = sizeof( m_rsockaddr );

	memset( &m_rsockaddr, 0, sizeof( m_rsockaddr ) );

	if( ( m_hSocket = accept( s, (SOCKADDR*)&m_rsockaddr, &Len ) ) == INVALID_SOCKET )
	{
        set_LastError( "accept() failed", WSAGetLastError() );
        return ERR_WSAERROR;
	}

	return ERR_SUCCESS;
}

int winSocket::asyncSelect( HWND hWnd, unsigned int wMsg, long lEvent )
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合久久综合亚洲| 精品视频一区三区九区| 亚洲va在线va天堂| 亚洲乱码国产乱码精品精的特点| 2023国产精品自拍| 欧美电影免费观看高清完整版在| 欧美日韩午夜在线视频| 欧美另类videos死尸| 欧美日韩国产综合视频在线观看| 91丨国产丨九色丨pron| 色就色 综合激情| 精品视频一区二区不卡| 欧美亚洲日本国产| 日韩一级大片在线观看| 欧美一卡二卡在线观看| 精品国产凹凸成av人网站| 欧美成人bangbros| 国产日本亚洲高清| 国产精品九色蝌蚪自拍| 依依成人综合视频| 日本不卡1234视频| 国产高清成人在线| 91网上在线视频| 欧美精品aⅴ在线视频| 日韩一区二区三区观看| 久久久99精品免费观看不卡| 国产精品麻豆欧美日韩ww| 亚洲欧美成人一区二区三区| 天堂成人免费av电影一区| 麻豆久久久久久| 99久久99久久免费精品蜜臀| 91国产丝袜在线播放| 日韩欧美亚洲国产另类| 国产精品福利一区二区| 午夜精品久久久久久久久| 国产精品91xxx| 色国产综合视频| 久久综合国产精品| 亚洲欧美日韩综合aⅴ视频| 日韩经典中文字幕一区| 成人av影院在线| 91精品在线观看入口| 国产精品久久久久久久岛一牛影视| 一区二区三区四区在线免费观看| 美腿丝袜在线亚洲一区| 成人污污视频在线观看| 欧美视频在线不卡| 国产精品嫩草影院com| 日韩精品久久理论片| 91啪在线观看| 久久久夜色精品亚洲| 五月婷婷色综合| 97久久精品人人澡人人爽| 精品人伦一区二区色婷婷| 一区二区三区免费网站| 丁香婷婷综合激情五月色| 欧美一区二区三区播放老司机| 国产精品丝袜一区| 麻豆精品国产91久久久久久| 色婷婷精品久久二区二区蜜臂av| 欧美一级视频精品观看| 一卡二卡欧美日韩| 成人精品一区二区三区四区| 精品久久免费看| 天使萌一区二区三区免费观看| eeuss国产一区二区三区| 精品久久久久久久久久久久久久久 | 成人久久久精品乱码一区二区三区| 欧美精品一二三四| 亚洲精品欧美激情| 99麻豆久久久国产精品免费| 久久日一线二线三线suv| 蜜桃视频在线观看一区二区| 欧美酷刑日本凌虐凌虐| 亚洲国产精品综合小说图片区| 成人自拍视频在线观看| 国产免费成人在线视频| 国产一区二区三区四区在线观看| 欧美精品v国产精品v日韩精品| 夜夜夜精品看看| 欧美综合亚洲图片综合区| 亚洲精品免费在线播放| 日本黄色一区二区| 亚洲国产成人精品视频| 欧美美女黄视频| 免费成人在线观看| 欧美一级国产精品| 国产一区二区三区免费在线观看| 欧美大片在线观看一区| 国产一区二三区好的| 久久综合色鬼综合色| 国产不卡在线视频| 综合久久给合久久狠狠狠97色| 成人动漫精品一区二区| 亚洲欧美日韩人成在线播放| 日本精品视频一区二区三区| 洋洋av久久久久久久一区| 欧美日韩视频专区在线播放| 免费观看在线色综合| www一区二区| 色综合久久天天| 日韩国产高清在线| 国产调教视频一区| 91麻豆自制传媒国产之光| 亚洲高清免费观看高清完整版在线观看 | 日韩亚洲欧美高清| 成人一区在线观看| 亚洲成人久久影院| 久久午夜免费电影| 色吧成人激情小说| 韩国成人福利片在线播放| 欧美激情在线看| 欧美伊人精品成人久久综合97| 日日摸夜夜添夜夜添亚洲女人| 久久免费的精品国产v∧| 99国产精品久久久久久久久久久 | 石原莉奈在线亚洲二区| 久久久久久久久久电影| 91豆麻精品91久久久久久| 国产在线一区二区| 一区二区视频免费在线观看| 久久综合狠狠综合久久激情| 欧洲精品在线观看| 国产乱对白刺激视频不卡| 亚洲一区二区影院| 欧美国产成人精品| 91.com视频| 日本韩国欧美一区| 高清日韩电视剧大全免费| 日韩影院精彩在线| 亚洲久草在线视频| 国产精品视频一二三区| 欧美成人一区二区三区在线观看| 色综合天天综合在线视频| 国产激情一区二区三区| 热久久国产精品| 亚洲在线一区二区三区| 欧美国产日本视频| 久久久久久影视| 精品成人在线观看| 日韩美女一区二区三区四区| 欧美伊人久久久久久久久影院| av欧美精品.com| 成人性视频网站| 国产盗摄一区二区| 国产另类ts人妖一区二区| 久久国内精品自在自线400部| 亚洲国产精品欧美一二99| 一区二区三区日韩精品| 亚洲欧美日韩系列| 亚洲激情五月婷婷| 亚洲综合在线免费观看| 亚洲欧美日韩久久精品| 亚洲欧美国产77777| 国产精品第五页| 亚洲日本欧美天堂| 亚洲黄色在线视频| 亚洲高清不卡在线观看| 婷婷成人激情在线网| 亚洲成av人片一区二区梦乃| 亚洲成人av一区二区| 五月综合激情网| 久久国产免费看| 国产精品一级二级三级| 不卡视频在线看| 色94色欧美sute亚洲线路二| 欧美视频在线一区| 日韩一区二区免费在线电影| 日韩欧美成人激情| 久久久精品国产免大香伊| 中文字幕的久久| 亚洲精品一二三区| 日韩黄色免费电影| 国产中文一区二区三区| 成人av片在线观看| 精品视频123区在线观看| 欧美一区日韩一区| 久久精品在这里| 亚洲自拍偷拍麻豆| 九九精品视频在线看| av在线不卡观看免费观看| 欧美手机在线视频| 久久久精品中文字幕麻豆发布| 国产精品黄色在线观看| 日韩精品电影在线| 99视频在线精品| 777亚洲妇女| 欧美国产日韩在线观看| 亚洲综合色网站| 理论电影国产精品| 91国内精品野花午夜精品| 欧美va亚洲va香蕉在线| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 一区二区三区欧美亚洲| 国模一区二区三区白浆| 色综合久久66| 久久综合久久久久88| 亚洲综合一区二区三区| 国产成人综合亚洲91猫咪| 欧美丝袜第三区|