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

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

?? rawsocket.cpp

?? pocket pc 2003系統下的數據通訊和文件傳輸
?? CPP
字號:
/////////////////////////////////////////////////////////////////////
// Class Creator Version 2.0.000 Copyrigth (C) Zhang Zhanjun
///////////////////////////////////////////////////////////////////
// Implementation File RawSocket.cpp
// class CWizRawSocket
//
// 11/10/2004
///////////////////////////////////////////////////////////////////


#include "stdafx.h"

#include "RawSocket.h"
#ifdef _UNICODE
#include <winnls.h>
#endif


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

void CWizSyncSocket::Init(SOCKET h)
{
	m_hSocket = h;
}

void CWizSyncSocket::Close()
{
	ASSERT(m_hSocket != INVALID_SOCKET);
	::closesocket(m_hSocket);
	m_hSocket = INVALID_SOCKET;
}

int CWizSyncSocket::SetIntOption(int level, int optname, int val)
{
	return ::setsockopt (m_hSocket, level, optname, (char *)&val, sizeof(val));
}

BOOL CWizSyncSocket::InitializeSocket(int nPort)
{
	// Socket must be created with socket()
	ASSERT(m_hSocket != INVALID_SOCKET);

	// Make up address
	SOCKADDR_IN	SockAddr;
	memset(&SockAddr,0, sizeof(SockAddr));
	SockAddr.sin_family = AF_INET;
	SockAddr.sin_addr.s_addr = INADDR_ANY;
	SockAddr.sin_port   = ::htons(nPort);
	
	// Bind to the address and port
	int r = ::bind(m_hSocket, (SOCKADDR*)&SockAddr, sizeof(SockAddr));
	if (r == 0)
	{
		SetIntOption (SOL_SOCKET, SO_DONTLINGER,1);
		SetIntOption (SOL_SOCKET, SO_KEEPALIVE,1);

		// establishes a socket to listen for incoming connection
		// so Accept can be called
		r = ::listen (m_hSocket, 5);
		if (r == 0)
			return TRUE;
	}
	int ret = GetLastError();
	return FALSE;
}

BOOL CWizSyncSocket::Create(int nPort)
{
	// creates a socket
	m_hSocket = ::socket(PF_INET, SOCK_STREAM, 0);
	if (m_hSocket == INVALID_SOCKET)
		return FALSE;

	// Bind to the port
	if (!InitializeSocket(nPort))
	{
		Close();
		return FALSE;
	}
	return TRUE;
}

// Create an invalid socket
CWizSyncSocket::CWizSyncSocket(SOCKET h /* = INVALID_SOCKET */)
{
	Init(h);
}

// Create a listening socket
CWizSyncSocket::CWizSyncSocket(int nPort)
{
	Init(INVALID_SOCKET);
	if(!Create(nPort))
		throw XCannotCreate();
}

CWizSyncSocket::~CWizSyncSocket()
{
	if (m_hSocket != INVALID_SOCKET)
		Close();
}

// Waits for pending connections on the port, 
// creates a new socket with the same properties as this 
// and returns a handle to the new socket
SOCKET CWizSyncSocket::Accept()
{
	SOCKET h = ::accept (m_hSocket, NULL, NULL);
	return h;
}

// Cerates a socket and establishes a connection to a peer
// on lpszHostAddress:nHostPort 
BOOL CWizSyncSocket::Connect(LPCTSTR lpszHostAddress, UINT nHostPort )
{
	ASSERT(lpszHostAddress != NULL);
	// Create ? socket
	if (m_hSocket == INVALID_SOCKET)
	{
		m_hSocket = ::socket(PF_INET, SOCK_STREAM, 0);
		if (m_hSocket == INVALID_SOCKET)
			return FALSE;
	}

	// Fill address machinery of sockets.
	SOCKADDR_IN sockAddr;
	memset(&sockAddr,0,sizeof(sockAddr));

#ifdef _UNICODE
	char buff[500];
	WideCharToMultiByte(CP_ACP, 0, lpszHostAddress, -1, buff, 500, NULL, NULL);
	LPSTR lpszAscii = buff;
#else
	LPSTR lpszAscii = (LPSTR)lpszHostAddress;
#endif

	sockAddr.sin_family = AF_INET;
	sockAddr.sin_addr.s_addr = inet_addr(lpszAscii);
	if (sockAddr.sin_addr.s_addr == INADDR_NONE)
	{
		LPHOSTENT lphost;
		lphost = gethostbyname(lpszAscii);
		if (lphost != NULL)
			sockAddr.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
		else
		{
			WSASetLastError(WSAEINVAL);
			return FALSE;
		}
	}
	sockAddr.sin_port = htons((u_short)nHostPort);
	
	// connects to peer
	int r = ::connect(m_hSocket, (SOCKADDR*)&sockAddr, sizeof(sockAddr));
	if (r != SOCKET_ERROR)
	{
		ASSERT(r == 0);
		return TRUE;
	}

	int e = ::WSAGetLastError();
	ASSERT(e != WSAEWOULDBLOCK);

	return FALSE;
}

// read raw data
int	CWizReadWriteSocket::Read(void *pData, int nLen) 
{
	char* pcData = (char* )pData;
	int	n = nLen;

	// if data size is bigger then network buffer
	// handle it nice
	do
	{
		int r1 = ::recv (m_hSocket, pcData, n, 0);
		if (r1 == SOCKET_ERROR)
		{
			int e = WSAGetLastError();
			ASSERT(e != WSAEWOULDBLOCK);
			return 0;
		}
		else if (r1 == 0)
		{
			return 0; 
		}
		else if (r1 < 0)
		{
			ASSERT(0);
			return 0;
		}
		
		pcData += r1;
		n -= r1;
	} while (n > 0);

	ASSERT(n == 0);
	return nLen;
}

// write raw data
int	CWizReadWriteSocket::Write(const void *pData, int nLen) 
{
	const char* pcData = (const char* )pData;
	int	n = nLen;

	// if data size is bigger then network buffer
	// handle it nice
	do
	{
		int r1 = ::send (m_hSocket, pcData, n, 0);
		if (r1 == SOCKET_ERROR)
		{
			int e = WSAGetLastError();
			ASSERT(e != WSAEWOULDBLOCK);
			return 0;
		}
		else if (r1 == 0)
		{
			return 0;
		}
		else if (r1 < 0)
		{
			ASSERT(0);
			return 0;
		}
		
		pcData += r1;
		n -= r1;
	} while (n > 0);

	ASSERT(n == 0);
	return nLen;
}

// Reads UNICODE string from socket.
// Converts string from ANSI to UNICODE.
int CWizReadWriteSocket::ReadString  (WCHAR* lpszString, int nMaxLen)
{
	// read string length
	u_long nt_Len;
	if (Read(&nt_Len, sizeof(nt_Len)) < sizeof(nt_Len))
		return 0;
	int Len = ntohl(nt_Len);
	if (Len == 0 || Len >= nMaxLen)
		return 0;

	static const int BUFF_SIZE = 2000;
	if (Len >= BUFF_SIZE)
		return 0;
	char buff[BUFF_SIZE];
	// Read ANSI string to the buffer
	if (Read(buff, Len) < Len)
		return 0;
	buff[Len] = 0;

	// Convert ANSI string to the UNICODE
	VERIFY(::MultiByteToWideChar(CP_ACP, 0, buff, Len, lpszString, nMaxLen*sizeof(lpszString[0])));
	return Len;
}

// Reads ANSI string from socket.
int CWizReadWriteSocket::ReadString  (char* lpszString, int nMaxLen)
{
	// read string length
	u_long nt_Len;
	if (Read(&nt_Len, sizeof(nt_Len)) < sizeof(nt_Len))
		return 0;
	int Len = ntohl(nt_Len);
	if (Len == 0 || Len >= nMaxLen)
		return 0;

	// Read ANSI string
	if (Read(lpszString, Len) < Len)
		return 0;
	lpszString[Len] = 0;
	return Len;
}

inline int Length(const char* p)
{
	return strlen(p);
}

inline int Length(const WCHAR* p)
{
	return wcslen(p);
}

// Writes UNICODE string to socket,
// converts UNICODE string to ANSI.
BOOL CWizReadWriteSocket::WriteString (const WCHAR*  lpszString, int nLen /* = -1*/)
{
	if (nLen < 0)
		nLen = Length(lpszString);
	static const int BUFF_SIZE = 2000;
	if (nLen >= BUFF_SIZE*sizeof(lpszString) + sizeof(u_long))
		return FALSE;
	char buff[BUFF_SIZE];
	u_long nt_Len = htonl(nLen);
	int nSize = sizeof(nt_Len);
	memcpy(buff, &nt_Len, nSize);

	// To make one call less, the length of the string
	// copied to the buffer before the string itself
	// and the buffer sent once.
	char* ptr = buff + nSize;
	if (nLen > 0)
	{
		// Convert ANSI to UNICODE
		int s = WideCharToMultiByte(CP_ACP, 0, lpszString, nLen, ptr, BUFF_SIZE - sizeof(u_long), NULL, NULL);
		ASSERT(s > 0);
		nSize += s;
	}
	return Write(buff, nSize);
}

// Writes ANSI string to socket.
BOOL CWizReadWriteSocket::WriteString (const char* lpszString, int nLen /* = -1*/)
{
	if (nLen < 0)
		nLen = strlen(lpszString);
	static const int BUFF_SIZE = 2000;
	if (nLen >= BUFF_SIZE*sizeof(lpszString) + sizeof(u_long))
		return FALSE;
	char buff[BUFF_SIZE];
	u_long nt_Len = htonl(nLen);
	int nSize = sizeof(nt_Len);
	memcpy(buff, &nt_Len, nSize);

	// To make one call less, the length of the string
	// copied to the buffer before the string itself
	// and the buffer sent once.
	char* ptr = buff + nSize;
	if (nLen > 0)
	{
		memcpy(ptr, lpszString, nLen);
		nSize += nLen;
	}
	return Write(buff, nSize);
}

BOOL CWizSyncSocket::GetHostName(LPTSTR lpszAddress, size_t nAddrSize, UINT& rSocketPort)
{
	if (nAddrSize < 1)
		return FALSE;

	*lpszAddress = TCHAR(0);
	SOCKADDR_IN sockAddr;
	memset(&sockAddr, 0, sizeof(sockAddr));
	int nSockAddrLen = sizeof(sockAddr);
	int r;

	while ((r = ::getsockname(m_hSocket, (SOCKADDR*)&sockAddr, &nSockAddrLen)) == SOCKET_ERROR)
	{
		const int e = ::WSAGetLastError();
		if (e != WSAEINPROGRESS)
			return FALSE;
	}

	ASSERT(r == 0);
	rSocketPort = ::ntohs(sockAddr.sin_port);

	char    szName[64];
	struct  hostent *h;
	DWORD	dwMyAddress;

	int r1;
	while((r1 = ::gethostname(szName,sizeof(szName))) == SOCKET_ERROR)
	{
		const int e = ::WSAGetLastError();
		if (e != WSAEINPROGRESS)
			return FALSE;
	}

	ASSERT(r1 == 0);
	h = (struct hostent *) ::gethostbyname(szName);
	memcpy(&dwMyAddress,h->h_addr_list[0],sizeof(DWORD));
	if (dwMyAddress == INADDR_NONE)
		return FALSE;
	struct   in_addr     tAddr;
	memcpy(&tAddr,&dwMyAddress,sizeof(DWORD));
	char    *ptr = ::inet_ntoa(tAddr);

#ifdef _UNICODE
	return ::MultiByteToWideChar(CP_ACP, 0, ptr, -1, lpszAddress, nAddrSize*sizeof(lpszAddress[0]));
#else
	if (size_t(lstrlen(ptr)) >= nAddrSize)
		return FALSE;
	lstrcpy(lpszAddress, ptr);
#endif

	return TRUE;
}

BOOL CWizSyncSocket::GetPeerName(LPTSTR lpszAddress, size_t nAddrSize, UINT& rPeerPort)
{
	if (nAddrSize < 1)
		return FALSE;
	*lpszAddress = TCHAR(0);
	SOCKADDR_IN sockAddr;
	memset(&sockAddr, 0, sizeof(sockAddr));

	int nSockAddrLen = sizeof(sockAddr);
	int r;
	while ((r = ::getpeername(m_hSocket, (SOCKADDR*)&sockAddr, &nSockAddrLen)) == SOCKET_ERROR)
	{
		const int e = ::WSAGetLastError();
		if (e != WSAEINPROGRESS)
			return FALSE;
	}

	ASSERT(r == 0);
	rPeerPort = ntohs(sockAddr.sin_port);
	char * pAddr = inet_ntoa(sockAddr.sin_addr);
	int len = strlen(pAddr);

#ifdef _UNICODE
	char buff[100];
	if (len >= 100 || len >= int(nAddrSize))
		return FALSE;
	memcpy(buff, pAddr,100);
	return ::MultiByteToWideChar(CP_ACP, 0, buff, len, lpszAddress, nAddrSize*sizeof(lpszAddress[0]));
#else
	if (size_t(len) >= nAddrSize)
		return FALSE;
	memcpy(lpszAddress, pAddr,len + 1);
#endif

	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清在线精品| 亚洲444eee在线观看| 亚洲欧美成人一区二区三区| 日本视频一区二区| 99re视频这里只有精品| 国产亚洲人成网站| 欧美精品在欧美一区二区少妇| 91精品国产入口| 男人的天堂亚洲一区| 日本一区二区在线不卡| 91精品1区2区| 国产一区二区影院| 性做久久久久久久免费看| 久久精品一区二区三区不卡| 欧美成人bangbros| 免费观看一级欧美片| 91免费视频大全| 国产91丝袜在线播放九色| 欧美一级二级三级蜜桃| 免费成人av在线播放| 亚洲愉拍自拍另类高清精品| 国产视频一区二区在线观看| 亚洲毛片av在线| 成人精品鲁一区一区二区| 欧美精品一区二区三区蜜臀| 奇米影视一区二区三区| 欧美日韩电影在线| 亚洲国产精品视频| 欧美视频中文一区二区三区在线观看| 亚洲美女淫视频| 色狠狠色狠狠综合| 亚洲激情六月丁香| 色综合久久久久久久久久久| 亚洲欧洲日产国码二区| www.欧美.com| 樱桃视频在线观看一区| 在线一区二区三区四区| 亚洲综合激情网| 欧美三区免费完整视频在线观看| 亚洲福利视频一区二区| 欧美一区二区三区在线看| 日日摸夜夜添夜夜添精品视频| 欧美精品成人一区二区三区四区| 亚洲电影第三页| 666欧美在线视频| 久久99精品久久久久久| 久久美女高清视频| 免费日本视频一区| 国产美女主播视频一区| 激情小说欧美图片| 91精品欧美综合在线观看最新| 亚洲手机成人高清视频| 色av成人天堂桃色av| 亚洲女人小视频在线观看| 欧美在线观看一区| 日本三级亚洲精品| 国产亚洲欧美日韩在线一区| 高清免费成人av| 一二三四区精品视频| 欧美一区二区三区免费| 成人综合在线观看| 一区二区三区日韩精品| 欧美精品久久久久久久久老牛影院| 久久爱www久久做| 国产精品国产三级国产三级人妇| 欧美少妇xxx| 久久成人免费日本黄色| 国产精品美女一区二区在线观看| 极品销魂美女一区二区三区| 欧美色窝79yyyycom| 中文字幕日韩一区二区| 在线不卡的av| 高清国产一区二区| 日韩影院精彩在线| 中文字幕一区三区| 欧美一级高清片在线观看| 99久久精品久久久久久清纯| 美美哒免费高清在线观看视频一区二区| 久久精品亚洲乱码伦伦中文 | 欧美男人的天堂一二区| 国产一区二区在线视频| 天堂一区二区在线| 亚洲视频一区在线| 欧美精品一区男女天堂| 911精品产国品一二三产区| 99视频超级精品| 激情文学综合丁香| 亚洲裸体在线观看| 久久久精品tv| 日韩小视频在线观看专区| 色一区在线观看| 国产91精品久久久久久久网曝门| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品1区2区3区| 偷拍与自拍一区| 亚洲日穴在线视频| 国产欧美va欧美不卡在线| 欧美午夜精品久久久久久超碰 | 国产成a人亚洲| 日韩和欧美的一区| 亚洲精品成人少妇| 中文字幕中文在线不卡住| 国产肉丝袜一区二区| 日韩免费电影网站| 欧美日韩日日骚| 欧美主播一区二区三区| 91香蕉视频mp4| gogogo免费视频观看亚洲一| 国产成人高清视频| 极品少妇xxxx精品少妇| 秋霞电影一区二区| 青青青爽久久午夜综合久久午夜| 亚洲小少妇裸体bbw| 亚洲午夜精品网| 亚洲午夜精品17c| 亚洲午夜精品一区二区三区他趣| 一区二区三区中文字幕电影| 亚洲精选视频免费看| 亚洲三级电影全部在线观看高清| 中文字幕精品一区二区三区精品| 国产亚洲成aⅴ人片在线观看| 久久免费精品国产久精品久久久久 | 九九九精品视频| 久久99精品国产.久久久久| 久久精品国产99久久6| 日本亚洲最大的色成网站www| 免费成人美女在线观看.| 日本成人在线一区| 韩国在线一区二区| 丁香天五香天堂综合| 97se亚洲国产综合自在线观| 91久久精品一区二区| 欧美一区二区三区免费大片| 精品欧美一区二区三区精品久久| 国产视频一区不卡| 亚洲人成网站精品片在线观看| 亚洲欧美偷拍卡通变态| 午夜久久久久久电影| 美女mm1313爽爽久久久蜜臀| 成人综合在线网站| 在线观看视频91| 欧美mv和日韩mv的网站| 国产精品素人视频| 午夜欧美2019年伦理| 韩国视频一区二区| 色久优优欧美色久优优| 欧美电视剧在线观看完整版| 国产精品色噜噜| 午夜国产精品影院在线观看| 国产精品亚洲综合一区在线观看| 91丨porny丨国产入口| 91精品国模一区二区三区| 久久精品夜夜夜夜久久| 亚洲一本大道在线| 国产福利一区在线| 欧美影视一区在线| 久久嫩草精品久久久久| 亚洲国产精品久久不卡毛片| 91免费观看在线| 最新中文字幕一区二区三区| 日日摸夜夜添夜夜添精品视频| 久久久久久亚洲综合| 毛片不卡一区二区| 韩国成人在线视频| 国产乱码精品一区二区三区av| 一本大道久久精品懂色aⅴ| 日韩亚洲电影在线| 亚洲午夜精品久久久久久久久| 懂色中文一区二区在线播放| 欧美日韩国产成人在线免费| 中文字幕中文字幕一区二区 | 福利一区福利二区| 欧美一区在线视频| 亚洲欧美乱综合| 丁香网亚洲国际| 日韩欧美国产三级| 亚洲午夜羞羞片| 一本高清dvd不卡在线观看| 亚洲精品在线免费观看视频| 亚洲精品免费一二三区| 国产精品 欧美精品| 日韩精品一区二区三区视频 | 国内欧美视频一区二区| 亚洲bdsm女犯bdsm网站| 免播放器亚洲一区| 欧美性猛片aaaaaaa做受| 亚洲欧美偷拍另类a∨色屁股| 97se亚洲国产综合自在线| 国产三级精品三级| 国产a精品视频| 久久蜜桃香蕉精品一区二区三区| 美女尤物国产一区| 欧美一卡二卡三卡四卡| 天堂av在线一区| 51精品国自产在线| 日韩成人dvd| 欧美一区二区三区四区高清| 日韩黄色免费电影| 欧美一区二区三区色| 香蕉成人伊视频在线观看|