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

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

?? tcpsocket.cpp

?? 一個采用TCP協議的網絡測試工具。采用VC6.0開發環境
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// TCPSocket.cpp: implementation of the CTCPSocket class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TCPNetKit.h"
#include "TCPSocket.h"

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

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

CTCPSocket::CTCPSocket(int nType)
{
	m_nType=nType;
	m_sSocket=NULL;
	m_bAvailable=Initwinsock();
	m_bCreated=FALSE;
	m_bAuto=FALSE;
	m_dwUserData=0;
	error=0;

	m_nPort=-1;
	m_hServerThread=NULL;
	for(int i=0;i<MAX_CONNECTION;i++)
	{
		m_hServerDataThread[i]=NULL;
		m_sServer[i]=NULL;
		ZeroMemory(m_cIp[i],16);
		m_bConnected[i]=FALSE;
	}
	m_nConnections=0;
	m_nCurrent=0;
	m_lpServerStatusProc=NULL;
	m_lpServerDataArriveProc=NULL;

	m_hClientThread=NULL;
	m_lpClientDataArriveProc=NULL;
	m_lpClientStatusProc=NULL;
}

CTCPSocket::~CTCPSocket()
{
	Close();
}

int CTCPSocket::GetError()
{
	return error;
}

SOCKET CTCPSocket::GetSocket()
{
	return m_sSocket;
}

int CTCPSocket::GetType()
{
	return m_nType;
}

BOOL CTCPSocket::IsConnected(SOCKET s)
{
	int nRet=0;
	struct fd_set Fd_Recv;
	struct timeval Time_Recv;

	memset(&Fd_Recv,0,sizeof(struct fd_set));
	FD_CLR(s,&Fd_Recv);
	FD_SET(s,&Fd_Recv);
	Time_Recv.tv_sec=0;
	Time_Recv.tv_usec=0;

	nRet=select(s,&Fd_Recv,NULL,NULL,&Time_Recv);

	return (nRet==0);
}

BOOL CTCPSocket::CreateServer(int nPort,int backlog)
{
	m_bAvailable=Initwinsock();
	if(!m_bAvailable)
	{
		return FALSE;
	}
	if(m_nType!=TCP_SOCKET_SERVER)
	{
		return FALSE;
	}
	if(m_bCreated)
	{
		return FALSE;
	}

	struct sockaddr_in local;

	m_sSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
	if(m_sSocket==SOCKET_ERROR)
	{
		error=WSAGetLastError();
		return FALSE;
	}

	local.sin_addr.s_addr=htonl(INADDR_ANY);
	local.sin_family=AF_INET;
	local.sin_port=htons(nPort);

	if(bind(m_sSocket,(struct sockaddr*)&local,sizeof(local))==SOCKET_ERROR)
	{
		error=WSAGetLastError();
		closesocket(m_sSocket);
		return FALSE;
	}

	if(listen(m_sSocket,backlog)!=0)
	{
		error=WSAGetLastError();
		closesocket(m_sSocket);
		return FALSE;
	}

	m_nPort=nPort;
	m_bCreated=TRUE;

	return TRUE;
}

BOOL CTCPSocket::StartServer(LPStatusProc proc1,LPDataArriveProc proc2,DWORD userdata)
{
	if(!m_bAvailable)
	{
		return FALSE;
	}
	if(m_nType!=TCP_SOCKET_SERVER)
	{
		return FALSE;
	}
	if(!m_bCreated)
	{
		return FALSE;
	}
	if(m_bAuto)
	{
		return FALSE;
	}

	m_lpServerStatusProc=proc1;
	m_lpServerDataArriveProc=proc2;
	m_dwUserData=userdata;

	DWORD dwThreadId;

	m_bAuto=TRUE;
	m_hServerThread=CreateThread(NULL,0,ServerThread,this,0,&dwThreadId);

	if(m_hServerThread==NULL)
	{
		m_bAuto=FALSE;
		error=WSAGetLastError();
		return FALSE;
	}
	
	return TRUE;
}

BOOL CTCPSocket::StopServer()
{
	if(!m_bAvailable)
	{
		return FALSE;
	}
	if(m_nType!=TCP_SOCKET_SERVER)
	{
		return FALSE;
	}
	if(!m_bCreated)
	{
		return FALSE;
	}
	if(!m_bAuto)
	{
		return FALSE;
	}

	DWORD exitcode;
	m_bAuto=FALSE;
	//停止監聽線程
	WaitForSingleObject(m_hServerThread,500);
	if(!GetExitCodeThread(m_hServerThread,&exitcode))
	{
		TerminateThread(m_hServerThread,exitcode);
	}
	CloseHandle(m_hServerThread);
	m_hServerThread=NULL;
	shutdown(m_sSocket,SD_RECEIVE);
	closesocket(m_sSocket);
	m_sSocket=NULL;

	//停止所有收發數據線程
	int i;
		
	for(i=0;i<MAX_CONNECTION;i++)
	{
		if(m_bConnected[i])
		{
			m_bConnected[i]=FALSE;
			WaitForSingleObject(m_hServerDataThread[i],50);
			if(!GetExitCodeThread(m_hServerDataThread[i],&exitcode))
			{
				TerminateThread(m_hServerDataThread[i],exitcode);
			}
			shutdown(m_sServer[i],SD_RECEIVE);
			closesocket(m_sServer[i]);
			m_sServer[i]=NULL;
			CloseHandle(m_hServerDataThread[i]);
			m_hServerDataThread[i]=NULL;
		}
	}
	m_nConnections=0;
	
	return TRUE;
}

SOCKET CTCPSocket::Listen(char* ClientIP)
{
	if(!m_bAvailable)
	{
		return -1;
	}
	if(m_nType!=TCP_SOCKET_SERVER)
	{
		return -1;
	}
	if(!m_bCreated)
	{
		return -1;
	}

	SOCKET sClient;
	int iAddrSize;
	struct sockaddr_in addr;

	iAddrSize=sizeof(addr);

	sClient=accept(m_sSocket,(struct sockaddr*)&addr,&iAddrSize);

	if(sClient==SOCKET_ERROR)
	{
		error=WSAGetLastError();
		closesocket(sClient);
		return SOCKET_ERROR;
	}

	if(ClientIP!=NULL)
	{
		sprintf(ClientIP,"%3d.%3d.%3d.%3d",addr.sin_addr.S_un.S_un_b.s_b1,addr.sin_addr.S_un.S_un_b.s_b2,addr.sin_addr.S_un.S_un_b.s_b3,addr.sin_addr.S_un.S_un_b.s_b4);
	}

	return sClient;
}

int CTCPSocket::ReceiveServer(int nNo,char* data,int length,int timeout)
{
	if(!m_bConnected[nNo])
	{
		return -2;
	}

	HANDLE hThread;
	DWORD dwThreadId;

	TimeOutParameter TimeOut;

	TimeOut.bExit=FALSE;
	TimeOut.bFinished=FALSE;
	TimeOut.EndTime=timeout;
	TimeOut.nNo=nNo;
	TimeOut.pbConnected=&(m_bConnected[nNo]);
	TimeOut.phDataThread=&(m_hServerDataThread[nNo]);
	TimeOut.pnConnections=&m_nConnections;
	TimeOut.s=m_sServer[nNo];

	hThread=CreateThread(NULL,0,TimeOutControl,(LPVOID)&TimeOut,0,&dwThreadId);

	if(hThread==NULL)
	{
		return -3;
	}

	int nRet=recv(m_sServer[nNo],data,length,0);
	if(nRet==SOCKET_ERROR)
	{
		error=WSAGetLastError();
	}
	TimeOut.bFinished=TRUE;

	while(!TimeOut.bExit)
	{
		Sleep(1);
	}

	return nRet;
}

int CTCPSocket::SendServer(int nNo,char *data,int length)
{
	if(!m_bConnected[nNo])
	{
		return -2;
	}

	int nRet=send(m_sServer[nNo],data,length,0);
	if(nRet==SOCKET_ERROR)
	{
		error=WSAGetLastError();
	}

	return nRet;
}

void CTCPSocket::Disconnect(int nNo)
{
	if(!m_bConnected[nNo])
	{
		return;
	}

	//斷開服務器上第nNo個連接
	DWORD exitcode;
	m_bConnected[nNo]=FALSE;
	WaitForSingleObject(m_hServerDataThread[nNo],50);
	if(!GetExitCodeThread(m_hServerDataThread[nNo],&exitcode))
	{
		TerminateThread(m_hServerDataThread[nNo],exitcode);
	}
	shutdown(m_sServer[nNo],SD_RECEIVE);
	closesocket(m_sServer[nNo]);
	m_sServer[nNo]=NULL;
	CloseHandle(m_hServerDataThread[nNo]);
	m_hServerDataThread[nNo]=NULL;
	m_nConnections--;

}

BOOL CTCPSocket::Connect(LPCTSTR pstrHost,int nPort)
{
	m_bAvailable=Initwinsock();
	if(!m_bAvailable)
	{
		return FALSE;
	}
	if(m_nType==TCP_SOCKET_SERVER)
	{
		return FALSE;
	}
	if(m_bCreated)
	{
		return FALSE;
	}

	LPHOSTENT lpHost;
	struct sockaddr_in server;

	//查找主機
	lpHost=gethostbyname(pstrHost);
	if(lpHost==NULL)
	{
		return FALSE;
	}

	server.sin_family=AF_INET;
	server.sin_addr.s_addr=*((u_long FAR*)(lpHost->h_addr));
	server.sin_port=htons(nPort);

	m_sSocket=socket(AF_INET,SOCK_STREAM,0);

	if(m_sSocket<=0)
	{
		error=WSAGetLastError();
		return FALSE;
	}
	
	if(connect(m_sSocket,(LPSOCKADDR)&server,sizeof(SOCKADDR))==SOCKET_ERROR) 
	{
		error=WSAGetLastError();
		closesocket(m_sSocket);
		m_sSocket=NULL;
		return FALSE;
	}

	m_bCreated=TRUE;

	return TRUE;
}

BOOL CTCPSocket::StartReceiving(LPStatusProc proc1,LPDataArriveProc proc2,DWORD userdata)
{
	if(!m_bAvailable)
	{
		return FALSE;
	}
	if(m_nType==TCP_SOCKET_SERVER)
	{
		return FALSE;
	}
	if(!m_bCreated)
	{
		return FALSE;
	}
	if(m_bAuto)
	{
		return FALSE;
	}

	//開始自動接收
	m_lpClientStatusProc=proc1;
	m_lpClientDataArriveProc=proc2;
	m_dwUserData=userdata;
	m_bAuto=TRUE;

	DWORD dwThreadId;

	m_hServerThread=CreateThread(NULL,0,ClientThread,this,0,&dwThreadId);

	if(m_hServerThread==NULL)
	{
		m_bAuto=FALSE;
		error=WSAGetLastError();
		return FALSE;
	}
	
	return TRUE;
}

BOOL CTCPSocket::StopReceiving()
{
	if(!m_bAvailable)
	{
		return FALSE;
	}
	if(m_nType==TCP_SOCKET_SERVER)
	{
		return FALSE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区在线观看| 精品日韩99亚洲| 精品一区二区免费在线观看| 日本不卡不码高清免费观看| 亚洲第一福利一区| 丝袜诱惑亚洲看片| 免费在线观看一区二区三区| 五月天激情小说综合| 天天综合网天天综合色| 日韩激情中文字幕| 久久se这里有精品| 国产成人啪免费观看软件| 加勒比av一区二区| 国产成人在线视频网站| 极品少妇xxxx精品少妇偷拍| 日韩精品亚洲一区二区三区免费| 亚洲精品视频在线| 欧美激情一区二区三区蜜桃视频| 欧美男女性生活在线直播观看| 不卡的av中国片| 国产麻豆91精品| 久久精品国产一区二区| 亚洲va国产天堂va久久en| 国产精品毛片高清在线完整版| 国产传媒久久文化传媒| 玖玖九九国产精品| 亚洲不卡一区二区三区| 亚洲精品亚洲人成人网在线播放| 国产精品成人网| 国产精品久久久久国产精品日日| 久久久蜜桃精品| 欧美v亚洲v综合ⅴ国产v| 国产精品一区专区| 精品中文字幕一区二区小辣椒| 日本不卡在线视频| 日韩av在线播放中文字幕| 午夜精品久久久久| 天天色综合成人网| 国产欧美一区在线| 国产午夜精品久久久久久免费视 | 欧美国产1区2区| 久久久亚洲精品石原莉奈| 26uuuu精品一区二区| 亚洲精品一区二区三区影院| 2020国产精品自拍| 国产欧美日韩在线看| 亚洲人成网站影音先锋播放| 欧美电视剧在线看免费| 久久久精品一品道一区| 亚洲三级久久久| 亚洲成人动漫精品| 国产一区二区h| 91丨九色丨黑人外教| 欧美综合在线视频| 欧美日韩一级二级| 日韩精品在线看片z| 国产欧美一区二区三区在线看蜜臀 | 亚洲综合色噜噜狠狠| 亚洲国产精品视频| 久久狠狠亚洲综合| av在线不卡网| 91精选在线观看| 欧美日韩一区二区三区免费看| 日韩欧美亚洲一区二区| 欧美韩国日本不卡| 亚洲一区二区三区自拍| 国产一区二三区| 欧洲视频一区二区| 久久婷婷国产综合精品青草| 久久久久国产精品免费免费搜索 | 一区二区三区在线不卡| 久久精品国产网站| 在线欧美日韩国产| 久久久一区二区| 7777精品伊人久久久大香线蕉的| 国产精品亚洲综合一区在线观看| 91在线视频播放地址| 91精品国产欧美一区二区| 欧美国产亚洲另类动漫| 日韩va亚洲va欧美va久久| 美女视频一区在线观看| 91麻豆免费看| 欧美韩日一区二区三区| 亚洲国产精品久久一线不卡| 高清在线观看日韩| 91精品婷婷国产综合久久竹菊| 精品久久久久久最新网址| 亚洲综合无码一区二区| 成年人网站91| 久久精品免费在线观看| 免费成人在线观看视频| 欧洲精品一区二区| 中文字幕一区二区不卡| 丰满少妇久久久久久久| 欧美一区二区三区四区久久| 樱花影视一区二区| 国产福利一区二区三区| 精品久久一区二区| 美女网站视频久久| 欧美成人伊人久久综合网| 日韩国产在线观看| 91搞黄在线观看| 91.com视频| 日韩和欧美的一区| 这里只有精品视频在线观看| 亚洲综合男人的天堂| 色偷偷成人一区二区三区91 | 国产在线精品国自产拍免费| 91蜜桃免费观看视频| 中文字幕一区二区三区视频| 久久成人久久鬼色| 欧美成人精品二区三区99精品| 日韩影院精彩在线| 五月激情综合婷婷| 91精品免费观看| 激情小说欧美图片| 欧美精品一区二区三区一线天视频 | 色婷婷综合久色| 亚洲一区二区欧美激情| 7777精品伊人久久久大香线蕉最新版| 欧美亚洲一区二区在线观看| 亚洲国产综合色| 精品少妇一区二区三区日产乱码 | 亚洲另类色综合网站| 色哟哟一区二区在线观看| 成人免费视频在线观看| 91福利在线播放| 亚洲精品视频自拍| 成人激情午夜影院| 亚洲激情图片一区| 欧美精品精品一区| 精品一区二区三区在线播放| 久久久www成人免费毛片麻豆| 国产v日产∨综合v精品视频| 亚洲国产精品国自产拍av| 一本色道久久综合亚洲91| 午夜精品aaa| 久久精品综合网| 在线一区二区三区| 九一九一国产精品| 亚洲国产精品黑人久久久| 在线视频综合导航| 国内精品第一页| 亚洲天堂福利av| 精品国内二区三区| 色综合久久久久| 久久99在线观看| 欧美激情资源网| 日韩欧美你懂的| 91在线国产福利| 韩国在线一区二区| 亚洲欧洲另类国产综合| 日韩一级在线观看| 欧美在线观看禁18| 国产成人精品午夜视频免费| 亚洲大片一区二区三区| 最新国产成人在线观看| 日韩亚洲欧美高清| 一本久道中文字幕精品亚洲嫩| 九色综合国产一区二区三区| 亚洲美女视频在线观看| 日韩久久精品一区| 欧美三级中文字| 99热99精品| 国产精品996| 激情综合网天天干| 日本在线不卡视频一二三区| 亚洲丝袜制服诱惑| 国产精品免费久久久久| 欧美精品乱码久久久久久| 在线一区二区三区四区五区| 成人国产精品视频| 国产成人三级在线观看| 激情综合网最新| 国内精品视频一区二区三区八戒| 婷婷久久综合九色综合绿巨人| 一区二区三区在线视频观看58| 欧美人与禽zozo性伦| 欧美在线啊v一区| 中文字幕亚洲一区二区av在线 | 午夜视频一区在线观看| 一本一道波多野结衣一区二区| 美国欧美日韩国产在线播放| 日韩专区中文字幕一区二区| 国产精品三级久久久久三级| 久久婷婷色综合| 久久久久久久久97黄色工厂| 国产亚洲午夜高清国产拍精品 | 久99久精品视频免费观看| 丝袜亚洲另类欧美综合| 美国毛片一区二区三区| 麻豆精品在线观看| 国产福利91精品一区| 国产精品性做久久久久久| 国产美女精品在线| 在线成人免费观看| 日韩国产一区二| 亚洲伦理在线精品| 大胆欧美人体老妇| 亚洲女性喷水在线观看一区|