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

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

?? tcpsocket.cpp

?? 很不錯的TCP的類
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// TcpSocket.cpp: implementation of the CTcpSocket class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TcpSocket.h"

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

#define TCP_BUFFER_LENGTH	512
#define TCP_DATA_QUEUE_SIZE	128

LPWSAPROTOCOL_INFO CTcpSocket::m_pProtocolsInfo;
LPWSAPROTOCOL_INFO CTcpSocket::m_pTcpInfo;

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

CTcpSocket::CTcpSocket()
{
	m_socket = INVALID_SOCKET;
	m_hIOThread = NULL;
	m_hNetEvent = m_hOutputEvent = m_hQuitEvent = NULL;
	m_bWriteOk = FALSE;
	m_bPDA = FALSE;
	m_bPDA_Audio = FALSE;
	OutputDebugString("no error!");
}

CTcpSocket::~CTcpSocket()
{
	if (m_socket != INVALID_SOCKET)
		Unprepare();
}

//////////////////////////////////////////////////////////////////////
// CTcpSocket public functions 
void CTcpSocket::SetPDA()
{
	m_bPDA = TRUE;
}
void CTcpSocket::SetPDAAudio()
{
	m_bPDA_Audio = TRUE;
}

BOOL CTcpSocket::Call(ULONG uPeerIP, HWND hWnd, int iPort)
{
	SOCKADDR_IN addr;
	int err;

	m_hWnd = hWnd;
	m_iPort = (iPort == 0) ? TCP_DEFAULT_PORT : iPort;

	if (Prepare() == FALSE)	
		return FALSE;

	// Create a socket for this connection.
	m_socket = WSASocket(FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO, m_pTcpInfo, 0, 0);
	if (m_socket == INVALID_SOCKET) 
	{
		OutputDebugString("Could not open a socket in Call\n");
		goto Error;
	} 
	else 
	{	// Set up socket for windows message event notification.
		int ppp=WSAAsyncSelect(m_socket, m_hWnd, WM_TCP_SOCKET_CONNECT, FD_CONNECT);
		int pp=WSAGetLastError();
	}

	addr.sin_family = AF_INET;
	addr.sin_port = htons(m_iPort);
	addr.sin_addr.s_addr = uPeerIP;

	err = WSAConnect(m_socket, (SOCKADDR *)&addr, m_pTcpInfo->iMaxSockAddr, NULL, NULL, NULL, NULL);
	if (err == SOCKET_ERROR) 
	{
		err = WSAGetLastError();
		if (err != WSAEWOULDBLOCK) 
		{
			OutputDebugString("WSAConnect failed\n");
			goto Error;
		}
	} 
	else 
	{
		OutputDebugString("WSAConnect should have returned SOCKET_ERROR\n");
		goto Error;
	}

	m_uPeerIP = addr.sin_addr.s_addr;
	m_strPeerName = inet_ntoa(addr.sin_addr);
	OutputDebugString("Calling " + m_strPeerName + "\n");
	return TRUE;

Error:
	Unprepare();
	return FALSE;
}

void CTcpSocket::Hangup()
{
	if (m_hQuitEvent != NULL)		SetEvent(m_hQuitEvent);
}

BOOL CTcpSocket::Write(char * pData, int iLength)
{
	if (m_hOutputEvent == NULL)	return FALSE;

	CSingleLock sLock(&m_critical);
	WSABUF * p = (WSABUF *)malloc(sizeof(WSABUF));
	if (p == NULL)
	{
		OutputDebugString("malloc failed in CTcpSocket::Write\n");
		return FALSE;
	}
	p->buf = (char *)malloc(TCP_BUFFER_LENGTH);
	if (p->buf == NULL)
	{
		free(p);
		OutputDebugString("malloc failed in CTcpSocket::Write\n");
		return FALSE;
	}
	memcpy(p->buf, pData, iLength);
	p->len = iLength;
	sLock.Lock();
	m_sendQueue.AddTail(p);
	sLock.Unlock();
	SetEvent(m_hOutputEvent);
//	Sleep(0);
	return TRUE;
}

ULONG CTcpSocket::Accept(SOCKET socketListen, LPARAM lParam, HWND hWnd, int iPort)
{
	SOCKADDR_IN addr;
	int iAddrLen = sizeof(addr);
	int err;
	DWORD dwThreadId;	// needed for CreateThread

	err = WSAGETSELECTERROR(lParam);
	// Check to see if there was an error on the connection attempt.
	if (err) 
	{	// Some kind of error occurred.
		if (err == WSAENETDOWN) 
		{
			OutputDebugString("The network is down\n");
        } 
		else 
		{
			OutputDebugString("Unknown error on FD_ACCEPT\n");
		}
		return 0;
	}

	m_hWnd = hWnd;

	//modified by zhb
	m_iPort = (iPort == 0) ? TCP_DEFAULT_PORT : iPort;

    //
	if (Prepare() == FALSE)		return 0;

	m_socket = WSAAccept(socketListen, (SOCKADDR *)&addr, &iAddrLen, NULL, (DWORD)NULL);
	if (m_socket == INVALID_SOCKET) 
	{
		err = WSAGetLastError();
		if (err != WSAECONNREFUSED) 
		{
			OutputDebugString("WSAAccept failed\n");
			goto Error;
		} 
		else 
		{
			OutputDebugString("The connection attempt has been refused\n");
			goto Error;
		}
	}
	m_uPeerIP = addr.sin_addr.s_addr;
	m_iPeerPort =addr.sin_port;
	m_strPeerName = inet_ntoa(addr.sin_addr);

	WSAAsyncSelect(m_socket, m_hWnd, 0, 0);
	// Put Connection in Event Object Notification Mode.
	WSAEventSelect(m_socket, m_hNetEvent, FD_READ | FD_WRITE | FD_CLOSE);

	// Start the I/O thread, and save the thread handle.
	m_hIOThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, this, 0, &dwThreadId);
	if (m_hIOThread == NULL) 
	{
		OutputDebugString("CreateThread() failed in HandleAcceptMessage()\n");
		goto Error;
	}

	OutputDebugString(m_strPeerName + " joined the meeting\n");
	return m_uPeerIP;

Error:
	Unprepare();
	return 0;
}

ULONG CTcpSocket::OnConnect(LPARAM lParam)
{
	int err;
	DWORD dwThreadId;	// needed for CreateThread

	err = WSAGETSELECTERROR(lParam);
	// Check to see if there was an error on the connection attempt.
	if (err) 
	{
		// Some kind of error occurred.
		if (err == WSAECONNREFUSED) 
		{
			OutputDebugString(m_strPeerName + " 處沒有應用程序應答\n");
		} 
		else 
		{
			OutputDebugString(m_strPeerName + " 沒有在網絡上\n");
		}
		goto Error;
	}

	WSAAsyncSelect(m_socket, m_hWnd, 0, 0);
	// Put Connection in Event Object Notification Mode.
	WSAEventSelect(m_socket, m_hNetEvent, FD_READ | FD_WRITE | FD_CLOSE);

	// Start the I/O thread, and save the thread handle.
	m_hIOThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, this, 0, &dwThreadId);
	if (m_hIOThread == NULL) 
	{
		OutputDebugString("CreateThread() failed in OnConnect()\n");
		goto Error;
	}

	OutputDebugString(m_strPeerName + " joined the meeting\n");
	return m_uPeerIP;

Error:
	Unprepare();
	return 0;
}

void CTcpSocket::OnClose()
{
	Unprepare();
}

//////////////////////////////////////////////////////////////////////
// CTcpSocket protected functions 

BOOL CTcpSocket::Prepare()
{
	m_hNetEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
	m_hOutputEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
	m_hQuitEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
	if (!m_hNetEvent || !m_hOutputEvent || !m_hQuitEvent)
	{
		OutputDebugString("CreateEvent fail in Prepare connection data\n");
		goto Error;
	}

	m_eventArray[0] = m_hNetEvent;
	m_eventArray[1] = m_hOutputEvent;
	m_eventArray[2] = m_hQuitEvent;

	return TRUE;

Error:
	Unprepare();
	return FALSE;
}

void CTcpSocket::Unprepare()
{
	if (m_hNetEvent != NULL)
	{
		CloseHandle(m_hNetEvent);
		m_hNetEvent = NULL;
	}
	if (m_hOutputEvent != NULL)
	{
		CloseHandle(m_hOutputEvent);
		m_hOutputEvent = NULL;
	}
	if (m_hQuitEvent != NULL)
	{
		CloseHandle(m_hQuitEvent);
		m_hQuitEvent = NULL;
	}
	if (m_hIOThread != NULL)
	{
		CloseHandle(m_hIOThread);
		m_hIOThread = NULL;
	}
	while (!m_sendQueue.IsEmpty())
	{
		WSABUF * p = m_sendQueue.RemoveHead();
		free(p->buf);
		free(p);
	}
	if (m_socket != INVALID_SOCKET)
	{
		WSAEventSelect(m_socket, m_hNetEvent, 0);
		closesocket(m_socket);
		m_socket = INVALID_SOCKET;
	}
}

//////////////////////////////////////////////////////////////////////
// CTcpSocket Static functions 

BOOL CTcpSocket::Startup()
{
	int i, err;
	DWORD dwBufferSize = 0;		// size of m_pProtocolsInfo buffer
	WORD wVersionRequested;
	BOOL bFoundTcp = FALSE;
	WSADATA wsaData;

	m_pProtocolsInfo = NULL;

	// Asynchronous IO and multicast semantics we use supported starting only with WinSock 2.0 
	wVersionRequested = MAKEWORD (2, 2);
    // Start WinSock 2.  If it fails, we don't need to call WSACleanup().
	err = WSAStartup (wVersionRequested, &wsaData);
	if (err != 0)
	{
		OutputDebugString("Could not find high enough version of WinSock\n");
		return FALSE;
	}
	if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) !=2 ) 
	{	
		OutputDebugString("Could not find the correct version of WinSock\n");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av网站在线| 91福利社在线观看| 国产69精品久久久久777| 国产成人av电影| 99精品一区二区| 欧美一区二区私人影院日本| 日韩精品一区二区三区视频在线观看 | 国产成人精品免费看| 成人av片在线观看| 欧美男人的天堂一二区| 中文字幕国产精品一区二区| 亚洲综合在线五月| 成人午夜在线播放| 91麻豆精品国产自产在线观看一区 | 精品国产区一区| 亚洲精品成人精品456| 麻豆精品精品国产自在97香蕉| 成人污污视频在线观看| 91精品国产全国免费观看| 中文字幕日韩av资源站| 狠狠色综合日日| 日韩免费在线观看| 亚洲国产精品嫩草影院| 色菇凉天天综合网| 国产精品成人免费| 成人高清av在线| 欧美国产精品v| 国产大陆精品国产| www精品美女久久久tv| 日韩国产精品久久久久久亚洲| 91原创在线视频| 一区二区三区影院| 欧美性一区二区| 亚洲1区2区3区4区| 日韩一区二区三区四区五区六区| 天堂精品中文字幕在线| 欧美日本一区二区| 美日韩一级片在线观看| 日韩欧美一卡二卡| 国产精品2024| 日韩美女精品在线| 欧美丰满一区二区免费视频| 九色|91porny| 国产精品欧美一区喷水| 91福利精品第一导航| 五月天视频一区| 18欧美亚洲精品| 精品一区二区影视| 3atv一区二区三区| 国产精品91一区二区| 综合亚洲深深色噜噜狠狠网站| 日本精品一区二区三区四区的功能| 亚洲一区免费观看| 久久蜜桃一区二区| 欧美日韩亚洲综合在线 | 777午夜精品免费视频| 国产成人超碰人人澡人人澡| 亚洲小说欧美激情另类| 久久久一区二区三区捆绑**| 99国产麻豆精品| 国产一区美女在线| 夜夜爽夜夜爽精品视频| 欧美激情综合在线| 日韩欧美在线网站| 欧美猛男男办公室激情| av在线免费不卡| 国产精品一区二区在线观看不卡 | 欧美日韩国产精品成人| 成人v精品蜜桃久久一区| 韩国精品一区二区| 美女视频免费一区| 青青草国产精品亚洲专区无| 17c精品麻豆一区二区免费| www久久精品| 久久精品一区二区三区四区| 欧美www视频| 久久综合成人精品亚洲另类欧美| 日韩午夜激情视频| 日韩欧美美女一区二区三区| 日韩视频永久免费| 日韩欧美专区在线| 精品国产一区二区三区久久影院| 日韩三级视频中文字幕| 日韩精品一区二区三区四区视频| 日韩午夜在线观看视频| 亚洲精品在线网站| 亚洲三级免费观看| 亚洲图片欧美视频| 久久99蜜桃精品| 岛国av在线一区| 欧美视频精品在线观看| 日韩欧美黄色影院| 18成人在线视频| 日韩极品在线观看| 成人丝袜视频网| 欧美色综合网站| 久久老女人爱爱| 亚洲成av人片一区二区| 国产精选一区二区三区| 欧美在线影院一区二区| 国产欧美日韩在线看| 五月激情六月综合| 99久久久久免费精品国产| 日韩一区二区麻豆国产| 国产精品青草久久| 韩国一区二区在线观看| 欧亚一区二区三区| 国产精品国产馆在线真实露脸| 极品销魂美女一区二区三区| 久久国产夜色精品鲁鲁99| 久久国产三级精品| 欧美精品丝袜中出| 一区二区在线免费观看| 国产成a人亚洲| 欧美电影免费观看完整版| 亚洲午夜久久久久中文字幕久| 国产精品自在在线| 精品国产一区二区三区四区四| 日韩福利电影在线| 91.xcao| 日本不卡123| 欧美电视剧在线观看完整版| 五月天激情小说综合| 欧美日韩一区在线| 午夜伦欧美伦电影理论片| 欧美日免费三级在线| 婷婷国产v国产偷v亚洲高清| 欧美伊人精品成人久久综合97| 亚洲欧美另类久久久精品2019 | 日韩欧美中文字幕一区| 久久国产乱子精品免费女| 精品国产露脸精彩对白| 国内精品久久久久影院薰衣草| 久久久久亚洲蜜桃| 成人久久久精品乱码一区二区三区| 国产欧美日韩不卡免费| 91在线精品一区二区三区| 亚洲超碰精品一区二区| 久久久久久麻豆| 色婷婷综合久久久中文字幕| 一区二区三区蜜桃| 精品国产91亚洲一区二区三区婷婷| 国产乱国产乱300精品| 国产精品久久久久久久久图文区 | 日韩国产欧美三级| 中文字幕永久在线不卡| 欧美日韩成人综合| 波多野结衣91| 久久国产精品一区二区| 自拍偷拍亚洲综合| 欧美xfplay| 在线播放中文字幕一区| 成人国产一区二区三区精品| 日日夜夜精品视频天天综合网| 中日韩av电影| 久久综合久色欧美综合狠狠| 欧美日韩午夜精品| 91性感美女视频| 国产99精品国产| 国产成人欧美日韩在线电影| 天天色综合天天| 午夜视频久久久久久| 一区二区三区精密机械公司| 国产亚洲短视频| 国产女人aaa级久久久级| 久久久亚洲高清| 久久久无码精品亚洲日韩按摩| 日韩亚洲欧美在线| 欧美岛国在线观看| 日韩午夜激情电影| 精品福利在线导航| 久久精品一区蜜桃臀影院| 欧美激情艳妇裸体舞| 日本一区免费视频| 中文字幕一区二区三区色视频| 欧美激情自拍偷拍| 亚洲精品菠萝久久久久久久| 亚洲资源在线观看| 天天操天天干天天综合网| 日韩中文字幕一区二区三区| 久久精品国产一区二区| 国产一区二区视频在线| 不卡av电影在线播放| 91久久奴性调教| 欧美一区二区三区啪啪| 国产欧美精品国产国产专区 | 91片黄在线观看| 欧美日韩成人在线一区| 国产午夜久久久久| 亚洲成a人v欧美综合天堂下载| 日本色综合中文字幕| 成人av在线影院| 日韩视频一区在线观看| 中文字幕在线不卡| 激情深爱一区二区| 欧美天堂一区二区三区| 国产亚洲精品超碰| 日韩成人一级片| 色综合久久久久久久| 国产精品无圣光一区二区|