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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? wsocket.cpp

?? 龔建斌的這本講串口編程的書很好。很適合初學(xué)者。并附有本書的中所有例程和串口調(diào)試助手源碼。
?? CPP
字號(hào):
//////////////////////////////////////////////////////////////////////
//WYD's Socket
//類作者SoFantasy  EMail: SoFantasy@21cn.com
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "WSocket.h"
#include <TIME.H>
#include <stdio.h> 

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

#define SD_RECEIVE      0x00
#define SD_SEND         0x01
#define SD_BOTH         0x02

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CWSocket::CWSocket()
{
	WSADATA wsaData;

	m_sSocket = NULL;
	m_bConnected = FALSE;
	m_sServer = NULL;
	m_bListened = FALSE;
	m_nServerPort = -1;
	m_hServerThread = NULL;

	m_bNeedClose = FALSE;
	m_bNeedCloseServer = FALSE;
	
	if(WSAStartup(0x202, &wsaData) == 0)
	{
		m_bWSAStartup = TRUE;
		err = 0;
	}
	else
	{
		m_bWSAStartup = FALSE;
		err = WSAGetLastError();
	}
}

CWSocket::CWSocket(SOCKET s)
{
	m_sSocket = NULL;
	m_bWSAStartup = FALSE;
	m_sServer = NULL;
	m_bListened = FALSE;
	m_nServerPort = -1;
	m_hServerThread = NULL;

	m_bNeedClose = FALSE;
	m_bNeedCloseServer = FALSE;
	
	m_bConnected = IsSockConnected(s);
	if(m_bConnected) m_sSocket = s;

	if(!m_bConnected)
	{
		WSADATA wsaData;
		if(WSAStartup(0x202, &wsaData) == 0)
		{
			m_bWSAStartup = TRUE;
			err = 0;
		}
		else
		{
			m_bWSAStartup = FALSE;
			err = WSAGetLastError();
		}
	}
}

CWSocket::operator=(SOCKET s)
{	
	if(IsSockConnected(s))
	{
		if(m_bConnected) Close();
		m_sSocket = s;
		m_bConnected = TRUE;
		m_bNeedClose = FALSE;
	}
}

CWSocket::~CWSocket()
{	
	if(m_bNeedClose) Close();
	if(m_bNeedCloseServer) CloseServer();
	if(m_bWSAStartup) WSACleanup();
}

BOOL CWSocket::Connection(LPCSTR pstrHost, int nPort)
{
	if(m_bConnected) Close();

	LPHOSTENT lpHost;	
	struct sockaddr_in server;	

	//Lookup host
	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)
	{
		err = WSAGetLastError();
		return FALSE;
	}

	if(connect(m_sSocket, (LPSOCKADDR)&server, sizeof(SOCKADDR)) == SOCKET_ERROR) 
	{
		err = WSAGetLastError();
		closesocket(m_sSocket);
		m_sSocket = NULL;
		return FALSE;
	}
	
	m_bNeedClose = TRUE;
	m_bConnected = TRUE;
	return TRUE;
}

void CWSocket::Close()
{
	if(!m_bConnected) return;
	if(m_sSocket == NULL) return;

	shutdown(m_sSocket, SD_RECEIVE);
	Sleep(50);
	closesocket(m_sSocket);
	m_sSocket = NULL;
	m_bConnected = FALSE;
}

void CWSocket::CloseServer()
{
	if(!m_bListened) return;
	if(m_sServer == NULL) return;

	shutdown(m_sServer, SD_RECEIVE);
	Sleep(50);
	closesocket(m_sServer);
	m_sServer = NULL;
	m_bListened = FALSE;
}


DWORD CALLBACK CWSocket::TimeoutControl(LPVOID lpParm)
{
	TPARA* para = (TPARA*)lpParm;
	time_t stime = time(NULL);
	BOOL bTimeover = FALSE;

	while(!bTimeover)
	{
		if(para->bExit)
		{
			para->IsExit = TRUE;
			return 0;
		}

		Sleep(1);

		time_t ntime = time(NULL);
		if((ntime - stime) > para->OutTime) bTimeover = TRUE;
	}

	if(para->bExit)
	{
		para->IsExit = TRUE;
		return 0;
	}

	if(para->s != NULL)
	{
		para->pbConnected[0] = FALSE;
		shutdown(para->s, SD_RECEIVE);
		Sleep(5);
		closesocket(para->s);
	}

	para->IsExit = TRUE;
	return 0;
}

int CWSocket::ReadData(char FAR* buf, int len, int timeout)
{
	if(!m_bConnected || m_sSocket == NULL)
	{
		err = -1;
		return -1;
	}

	HANDLE hThread;
	DWORD dwThreadId;
	TPARA para;

	para.OutTime = timeout;
	para.s = m_sSocket;
	para.bExit = FALSE;
	para.IsExit = FALSE;
	para.pbConnected = &m_bConnected;
	hThread = CreateThread(NULL, NULL, TimeoutControl, (LPVOID)(&para), 0, &dwThreadId);
	if (hThread == NULL) return -1;

	int nRet = recv(m_sSocket, buf, len, 0);
	if(nRet == SOCKET_ERROR) err = WSAGetLastError();

	para.bExit = TRUE;
	while(!para.IsExit) Sleep(1);

	return nRet;
}

int CWSocket::SendData(const char FAR *buf, int len, int timeout)
{
	if(!m_bConnected || m_sSocket == NULL)
	{
		err = -1;
		return -1;
	}

	if(!IsSockConnected(m_sSocket))
	{
		m_bConnected = FALSE;
		err = -1;
		return -1;
	}

	int nRet = send(m_sSocket, buf, len, 0);

	if(nRet == SOCKET_ERROR) err = WSAGetLastError();

	return nRet;
}

BOOL CWSocket::IsSockConnected(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 CWSocket::CreateServer(int port, int backlog)
{
	if(m_bListened == TRUE) CloseServer();

	struct	sockaddr_in local;

	//創(chuàng)建監(jiān)聽socket
    m_sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if(m_sServer == SOCKET_ERROR)
    {
        err = WSAGetLastError();
        return FALSE;
    }

	//添參數(shù)	
	local.sin_addr.s_addr = htonl(INADDR_ANY);
    local.sin_family = AF_INET;
    local.sin_port = htons(port);

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

	//開始偵聽
    if(listen(m_sServer, backlog) != 0)
	{
		err = WSAGetLastError();
		closesocket(m_sServer);
        return FALSE;
    }

	m_nServerPort = port;
	m_bListened = TRUE;
	m_bNeedCloseServer = TRUE;

	return TRUE;
}

SOCKET CWSocket::Listen(char *ClientIP)
{
	if(!m_bListened) return -1;
	if(m_sServer == NULL) return -1;

	SOCKET	sClient;	
	int		iAddrSize;
	struct	sockaddr_in addr;

	iAddrSize = sizeof(addr);

	sClient = accept(m_sServer, (struct sockaddr *)&addr, &iAddrSize);
	
	if(sClient == SOCKET_ERROR)
	{
		err = WSAGetLastError();
        return SOCKET_ERROR;
    }

	if(ClientIP != NULL)
	{
		sprintf(ClientIP, "%d.%d.%d.%d", 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;
}

BOOL CWSocket::StartServer(DEALPROC lpDealFunc)
{
	if(!m_bListened) return -1;
	if(m_sServer == NULL) return -1;

	DWORD dwThreadId;
	SERVERPARA *para;

	para = new SERVERPARA;
	para->s = m_sServer;
	para->port = m_nServerPort;
	para->lpDealFunc = lpDealFunc;

	m_hServerThread = CreateThread(NULL, 0, ServerProc, (LPVOID)(para), 0, &dwThreadId);

	if(m_hServerThread == NULL)
	{
		delete para;
		err = WSAGetLastError();
        return FALSE;
	}

	return TRUE;
}

BOOL CWSocket::StopServer()
{
	CloseServer();

	return TRUE;
}

DWORD CALLBACK CWSocket::ServerProc(LPVOID lpParm)
{
	SERVERPARA *para = (SERVERPARA*)lpParm;
	
	if(para == NULL) return -1;

	SOCKET		s = para->s;
	int			port = para->port;
	DEALPROC	lpDealFunc = para->lpDealFunc;
	delete para;

	SOCKET	sClient;	
	int		iAddrSize;
	struct	sockaddr_in addr;
	char	IP[32];
	HANDLE	hThread;
    DWORD	dwThreadId;
	DEALPARA *parac;

	iAddrSize = sizeof(addr);

	while(1)
	{
		sClient = accept(s, (struct sockaddr *)&addr, &iAddrSize);
		
		if(sClient == SOCKET_ERROR) break;

		sprintf(IP, "%d.%d.%d.%d", 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);

		parac = new DEALPARA;
		memset(parac->IP, 0, sizeof(parac->IP));
		parac->s = sClient;
		parac->port = port;
		parac->lpDealFunc = lpDealFunc;
		memcpy(parac->IP, IP, strlen(IP));	

		//偵聽到連接,開一個(gè)線程		
        hThread = CreateThread(NULL, 0, DealProc, (LPVOID)(parac), 0, &dwThreadId);

		if(hThread == NULL) delete parac;
	}

	return 0;
}

DWORD CALLBACK CWSocket::DealProc(LPVOID lpParm)
{
	DEALPARA *para = (DEALPARA*)lpParm;
	
	if(para == NULL) return -1;

	SOCKET		s = para->s;
	int			port = para->port;
	DEALPROC	lpDealFunc = para->lpDealFunc;
	char		IP[32];
	memcpy(IP, para->IP, sizeof(IP));
	delete para;

	try{lpDealFunc(s, port, IP);}catch(...){return -1;}

	return 0;
}

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

SOCKET CWSocket::GetServerSocket()
{
	return m_sServer;
}

int CWSocket::GetError()
{
	return err;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品久久天天躁| 99re热这里只有精品免费视频| 欧美色中文字幕| 亚洲综合视频网| 欧美日本在线看| 日产欧产美韩系列久久99| 日韩欧美一二区| 高清国产一区二区| 亚洲乱码国产乱码精品精的特点| 欧美日韩一区国产| 免费成人你懂的| 久久精品人人爽人人爽| 92精品国产成人观看免费| 丝袜诱惑制服诱惑色一区在线观看| 91精品久久久久久久91蜜桃| 国内精品免费在线观看| 综合久久久久久久| 日韩欧美一区在线| 成人国产精品免费观看视频| 亚洲一区二区三区国产| 久久综合网色—综合色88| 成人综合在线观看| 亚洲成av人片一区二区梦乃| 日韩精品最新网址| 99久久久精品| 极品少妇xxxx精品少妇偷拍| 亚洲欧洲av一区二区三区久久| 欧美日韩久久久| 国产成人av一区二区三区在线 | 国产亚洲1区2区3区| 92精品国产成人观看免费| 亚洲成人免费视频| 国产亚洲一区二区三区在线观看 | 欧美高清视频不卡网| 国产毛片一区二区| 午夜精品久久久久影视| 国产精品久久毛片| 欧美一级高清片在线观看| av中文字幕在线不卡| 麻豆中文一区二区| 一区二区三区精品在线观看| 精品国产凹凸成av人网站| 欧美亚洲自拍偷拍| av亚洲精华国产精华精| 蜜桃精品视频在线观看| 亚洲精品老司机| 欧美国产精品一区| 日韩免费性生活视频播放| 在线亚洲人成电影网站色www| 久久99精品国产.久久久久| 一区二区三区自拍| 国产精品少妇自拍| 日韩精品中午字幕| 欧美精品一卡二卡| 欧美午夜理伦三级在线观看| 成人激情午夜影院| 国产精品一区二区你懂的| 奇米色777欧美一区二区| 亚洲成人av电影在线| 亚洲人一二三区| 中文字幕av在线一区二区三区| 日韩精品中午字幕| 91精品国产综合久久精品麻豆| 91麻豆自制传媒国产之光| jlzzjlzz欧美大全| 成人国产亚洲欧美成人综合网| 国产精品1区二区.| 激情六月婷婷综合| 国产一区二区h| 国产乱人伦精品一区二区在线观看 | 久久综合视频网| 欧美一区二区免费| 欧美一区二区三区四区视频 | 97久久人人超碰| 成人av第一页| 成人激情av网| 成人激情午夜影院| 91美女在线看| 欧美午夜在线观看| 欧美特级限制片免费在线观看| 在线一区二区三区四区| 在线免费观看日本欧美| 欧美日韩一区小说| 91精品国产综合久久精品app | 欧美三级中文字| 欧美一区二区三区四区高清| 欧美一区二区三区影视| 日韩一级黄色大片| 国产亚洲精品bt天堂精选| 国产欧美一区二区三区沐欲| 国产精品免费免费| 亚洲免费av高清| 亚洲成人动漫在线观看| 久久av资源站| 国产精品乡下勾搭老头1| 不卡一卡二卡三乱码免费网站| 成人成人成人在线视频| 一本色道久久综合亚洲aⅴ蜜桃| 欧洲一区在线电影| 6080日韩午夜伦伦午夜伦| 精品成人一区二区| **欧美大码日韩| 亚洲成人福利片| 国产主播一区二区三区| 不卡的av电影| 4hu四虎永久在线影院成人| 欧美精品一区视频| 1000部国产精品成人观看| 亚洲国产美国国产综合一区二区| 日韩**一区毛片| 成人动漫精品一区二区| 欧美军同video69gay| 国产日韩v精品一区二区| 亚洲综合丁香婷婷六月香| 久久精品国产99| 色综合天天综合狠狠| 91精品国产综合久久久久久久 | 色婷婷精品大在线视频| 欧美久久婷婷综合色| 国产欧美精品区一区二区三区| 亚洲午夜精品久久久久久久久| 国产揄拍国内精品对白| 欧美午夜片在线看| 欧美激情综合五月色丁香小说| 亚洲成人免费在线| www.欧美亚洲| 欧美成人一区二区三区在线观看| 亚洲色图色小说| 精品无人码麻豆乱码1区2区| 91福利社在线观看| 欧美国产日韩精品免费观看| 亚洲h精品动漫在线观看| 成人免费视频caoporn| 欧美精品一二三| 亚洲精品国产精品乱码不99| 国产美女在线精品| 91精品国产一区二区三区蜜臀 | 91啦中文在线观看| 国产亚洲欧美色| 久久99久久99| 欧美一卡二卡在线观看| 一区二区三区美女| www.久久精品| 欧美极品少妇xxxxⅹ高跟鞋| 免费精品视频在线| 88在线观看91蜜桃国自产| 亚洲美女视频在线| av资源站一区| 中文天堂在线一区| 国产白丝精品91爽爽久久| 日韩一区二区三区免费看 | 亚洲综合丝袜美腿| 91丨国产丨九色丨pron| 亚洲国产精品成人综合| 国产精品羞羞答答xxdd| 久久综合九色综合欧美就去吻| 日韩av二区在线播放| 91麻豆精品国产91久久久久久| 亚洲一卡二卡三卡四卡无卡久久 | 成人天堂资源www在线| 精品成人私密视频| 国产在线看一区| 精品欧美一区二区三区精品久久| 蜜臀av亚洲一区中文字幕| 91.com在线观看| 亚洲成人激情av| 欧美一区二区免费观在线| 麻豆成人在线观看| 精品国产污污免费网站入口| 毛片av一区二区| 2020国产精品| 国产高清亚洲一区| 国产精品三级电影| 色网综合在线观看| 亚洲国产成人av| 51精品久久久久久久蜜臀| 美女看a上一区| 久久久精品黄色| www..com久久爱| 亚洲国产视频直播| 欧美一区二区三区免费观看视频| 日韩av网站免费在线| 久久综合99re88久久爱| 成人免费视频app| 一区二区三区日韩欧美| 欧美情侣在线播放| 国产在线精品免费av| 欧美国产精品一区二区三区| 91小视频在线观看| 亚洲成人一二三| 亚洲精品一区二区三区香蕉| 成人亚洲一区二区一| 亚洲蜜臀av乱码久久精品蜜桃| 欧美军同video69gay| 国产一级精品在线| 亚洲一级不卡视频| 欧美一卡二卡三卡四卡| 成人激情开心网| 三级影片在线观看欧美日韩一区二区 | 久久精品日产第一区二区三区高清版|