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

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

?? ysocket.h

?? 非常方便的網絡Socket類
?? H
?? 第 1 頁 / 共 3 頁
字號:
#if !defined(YSocket_INCLUDED)
#define YSocket_INCLUDED
// typedef YSocket<CString> CMySocket; //使用方法
/*
#include <afx.h>       //MFC 支持
#include <afxwin.h>    // MFC core and standard components
#include <afxext.h>    // MFC extensions
*/
#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib,"Ws2_32.lib")
/*
struct linger {
    u_short    l_onoff;
    u_short    l_linger;
};
*/
//static struct linger lg = {0,0};
template <class STRING>
class YSocket
{
public:
	struct sockaddr tpserver;
 	int nSTP; 
	SOCKET m_hSocket;
	int SEQ;							//用來記錄次序的,一般沒有用,保留變量
	int SEQ2;
	int IsLive;						//判斷此 sock 類是否處于活動狀態
	enum {DEFAULT_TIMEOUT=60};	
	YSocket()
	{
		sfGetP = 0;
		isWSAStartup = 0 ;
		SEQ = 0;SEQ2 =0 ;	SHUT_MODE = SD_BOTH ;
		if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){
			//初始化錯誤!
			STRING tp;tp.Format("WSAStartup.no.1:%s",GetErrorStr());
			throw tp ;	
		}
		isWSAStartup = 1;
		//下面的語句用來保證如果 IsLive 已經被激活(如果是靜態變量則會發生)
		m_strIPADD = "";
		if(IsLive !=1){
			m_hSocket = NULL; 
			IsLive = 0;
		}
	};
	YSocket(SOCKET nSocket)
	{
		isWSAStartup = 0;		sfGetP = 0;
		SEQ = 0;SEQ2 =0 ;  SHUT_MODE = SD_BOTH ;
		if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){
			//初始化錯誤!
			STRING tp;tp.Format("WSAStartup.no.2:%s",GetErrorStr());
			throw tp ;	
		}
		isWSAStartup = IsLive = 1;
		m_hSocket = nSocket;
		m_strIPADD = "";
	};
	~YSocket()
	{
		if(IsLive){
			try{
				if(nSTP == SOCK_STREAM){
					//char tpbuffer[1000];
					//Read(tpbuffer,1000,0);
					shutdown(m_hSocket,SD_BOTH);
					closesocket(m_hSocket);
				} 
			}catch(...){
				;
			}
		}
		if(isWSAStartup==1)WSACleanup();
	}
	int GetNPort(){
		if(!(sfGetP&2)){
			GetPort();
		}
		return PORT;
	}
  BOOL Attach(SOCKET s)
  {
    Close();
    Create();
    m_hSocket = s;
    return TRUE;
  }
  static SOCKET GetAConnectSocket(STRING sIp,int nPort)
  {
    WSADATA wsa;
    if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){
      STRING tp;tp.Format("WSAStartup.no.1:%s",GetErrorStr());
			throw tp ;	
    }
    SOCKET s;
    if ( (s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET){
		  STRING tp;tp.Format("Create Socket Failed :%s",GetErrorStr());
		  throw tp ;
    }
	  SOCKADDR_IN server;
    server.sin_family = AF_INET;
    server.sin_port = htons(nPort);
	  if((server.sin_addr.s_addr=inet_addr(sIp)) == INADDR_NONE) {   // lpszHostAddress 不是*.*.*.*格式的IP地址
		  struct hostent *hp;          // 通過主機名獲取主機地址
		  if((hp = gethostbyname(sIp)) != NULL) {
			  memcpy(&(server.sin_addr),hp->h_addr_list[0],hp->h_length);
			  server.sin_family = hp->h_addrtype;
		  }else {
			  STRING tp;tp.Format("Connect.no.2:%s",GetErrorStr());
			  throw tp ;
		  }
	  }
    if(connect(s,(struct sockaddr *) &server, sizeof(SOCKADDR)) == SOCKET_ERROR) {
		  STRING tp;tp.Format("Connect.no.1:%s",GetErrorStr());
		  throw tp ;
	  }
    return s;
  }
	void  Create(int nSocketType=SOCK_STREAM);
	virtual bool Accept(YSocket& rConnectedSocket,SOCKADDR* lpSockAddr = NULL);
	void Bind(UINT nSocketPort, LPCTSTR lpszSocketAddress = NULL,int mode=0);//可以直接用IP地址或域名
	void Bind (const SOCKADDR* lpSockAddr,int mode=0);
	BOOL Close(int mode = 1);
	void Connect(const SOCKADDR* lpSockAddr);
	void Connect(LPCTSTR lpszHostAddress, UINT nHostPort); //可以直接用IP地址或域名
	static STRING GetErrorStr();
	void Listen(int nConnectionBacklog=5);
	virtual int Receive(void* lpBuf,const int nBufLen, const int nSecs = DEFAULT_TIMEOUT); //例子參見2.5.2.3
	int ReceiveTest(void* lpBuf, const int nBufLen); //例子參見2.5.2.3
	int ReceiveFrom(void* lpBuf, const int nBufLen,const int nSecs = DEFAULT_TIMEOUT);
	int ReceiveFrom(void* lpBuf, const int nBufLen,LPCTSTR  pSocketAddress, UINT& rSocketPort,const int nSecs = DEFAULT_TIMEOUT); 
	int ReceiveFrom(void* lpBuf, const int nBufLen,SOCKADDR* lpSockAddr, const int nSecs);
	virtual int Send(const void* lpBuf, int nBufLen,const int nSecs = DEFAULT_TIMEOUT);
	int Read(void* lpBuf, int nBufLen,const int nSecs = DEFAULT_TIMEOUT,int mode = 0);
	int Write(const void* lpBuf, int nBufLen,const int nSecs = DEFAULT_TIMEOUT);
	int SendTo(const void* lpBuf, int nBufLen,UINT nHostPort, LPCTSTR lpszHostAddress, const int nSecs=DEFAULT_TIMEOUT);
	int SendTo(const void* lpBuf, int nBufLen,const SOCKADDR* lpSockAddr, const int nSecs=DEFAULT_TIMEOUT);
	int SendTo(const void* lpBuf, int nBufLen,const int nSecs=DEFAULT_TIMEOUT);
	//得到cmysock中ip的端口字符串
	static STRING GetPort(YSocket& pSock);
	STRING& GetPort();
	//得到cmysock中ip的地址字符串
	static STRING GetIpAdd(YSocket& pSock);
	//得到把域名解吸成ip的地址字符串
	static STRING GetIpAdd(STRING tpdomain);
  //得到制定的 socket 的本地地址和端口
  static STRING GetLocIpAdd(SOCKET s);
  static UINT GetLocPort(SOCKET s);
  STRING GetLocPort();
  STRING GetLocIpAdd();

	STRING GetIpAdd(int mode=0);//如果mode=1則強制得到
	YSocket& operator =(YSocket& tp);
	YSocket& operator =(YSocket* tp);
	friend YSocket;
private:
	WSADATA wsa;
	int SHUT_MODE ;
	int isWSAStartup ;	//是否初始化了 WSAStartup 
	STRING m_strPORT;			//記錄遠程端口
	STRING m_strIPADD;		//記錄遠程ip地址
  STRING m_strLocPORT;			//記錄本地端口
	STRING m_strLocIPADD;		//記錄本地ip地址
	UINT PORT;						//
  UINT LocPORT;
	int sfGetP;
	void GetSockAddr(sockaddr_in &sinAddress,LPCTSTR SocketAddress,UINT nSocketPort);
	int JugeTime(int nSecs=DEFAULT_TIMEOUT,int flag=1);
};
// stdafx.cpp : source file that includes just the standard includes
//	FILEPTOP.pch will be the pre-compiled header
//	stdafx.obj will contain the pre-compiled type information
template <class STRING>
void YSocket<STRING>::GetSockAddr(sockaddr_in &sinAddress,LPCTSTR SocketAddress,UINT nSocketPort)
{
	sinAddress.sin_family		= AF_INET ;
	sinAddress.sin_addr.s_addr	= inet_addr(SocketAddress);
	sinAddress.sin_port			= htons(nSocketPort);
}
template <class STRING>
int YSocket<STRING>::JugeTime(int nSecs,int flag)
{
	int ret;
	/*/
	FD_SET fdread,fdwrite,fdexcept;
	FD_ZERO(&fdread);			//將fdread清空
	FD_ZERO(&fdwrite);			//將fdwrite清空
	FD_ZERO(&fdexcept);			//fdexcept
	FD_SET(m_hSocket,&fdread);	// 把 sockFD 加入到 fdread 套接口中
	FD_SET(m_hSocket,&fdwrite); // 把 sockFD 加入到 fdwrite套接口中
	FD_SET(m_hSocket,&fdexcept); // 把 sockFD 加入到 fdexcept套接口中
	*/
	FD_SET	fd = {1, m_hSocket};
	if(nSecs==-1){
		switch (flag){
			case 1:
				ret=select(0, &fd,NULL,NULL,NULL);
				break;
			case 2:
				ret=select(0, NULL,&fd,NULL,NULL);
				break;
			case 3:
				ret=select(0, NULL,NULL,&fd,NULL);
				break;
		}

		if(ret==SOCKET_ERROR) {
			STRING tp;tp.Format("JugeTime.no.1:%s",GetErrorStr());
			throw tp ;	
		}
		//TRACE("ret=%d\n",ret);
		if(ret>0){
			return flag;
		}else if(ret==0){
			return 0;
		}
		return 0;
	}else{
		TIMEVAL tv = {nSecs, 0};
		//TRACE("m_hSocket=%d\n jugetime=%d\n",m_hSocket,nSecs);
			//ret=select(0, NULL,&fd,NULL,&tv);
			//ret=select(0, NULL,NULL,&fd,&tv);
		switch (flag)	{
		case 1:
			ret=select(0, &fd,NULL,NULL,&tv);
			break;
		case 2:
			ret=select(0, NULL,&fd,NULL,&tv);
			break;
		case 3:
			ret=select(0, NULL,NULL,&fd,&tv);
			break;
		}

		if(ret==SOCKET_ERROR) {
			STRING tp;tp.Format("JugeTime.no.1:%s",GetErrorStr());
			throw tp ;	
		}
		//TRACE("ret=%d\n",ret);
		if(ret>0){
			return flag;
		}else if(ret==0){
			return 0;
		}
		return 0;
	}
} 
template <class STRING>
bool YSocket<STRING>::Accept(YSocket& rConnectedSocket,
					   SOCKADDR* lpSockAddr )
{
	int len=sizeof(sockaddr);
	if(lpSockAddr==NULL){
		lpSockAddr=&rConnectedSocket.tpserver;
	}
	if(nSTP==SOCK_STREAM){
		if((rConnectedSocket.m_hSocket=accept(m_hSocket,lpSockAddr,&len))==INVALID_SOCKET){
			STRING tp;tp.Format("Accept.no.1:%s",GetErrorStr());
			throw tp ;	
		} 
		rConnectedSocket.nSTP = SOCK_STREAM;
		if(lpSockAddr!=&rConnectedSocket.tpserver){
			rConnectedSocket.tpserver=*lpSockAddr;
		}
		rConnectedSocket.IsLive=1;
		rConnectedSocket.sfGetP = 0;
		return 1;
	}else return 0;
}
//可以直接用IP地址或域名
template <class STRING>
void YSocket<STRING>::Bind(UINT nSocketPort, LPCTSTR lpszSocketAddress,int mode)
{	
	struct sockaddr_in sinAddress ;

	sinAddress.sin_family		= AF_INET ;
	if (lpszSocketAddress == NULL){
		sinAddress.sin_addr.s_addr	= ADDR_ANY;
	}else{
		sinAddress.sin_addr.s_addr	= inet_addr(lpszSocketAddress);
	}
	sinAddress.sin_port			= htons(nSocketPort);

	switch(mode){
	case 1:
		BOOL tp = TRUE;
		setsockopt(m_hSocket,SOL_SOCKET ,SO_REUSEADDR,(char*)&tp,sizeof(BOOL));
		break;
	}
	if (bind(m_hSocket,(sockaddr *)&sinAddress,sizeof(struct sockaddr_in)) == SOCKET_ERROR){
		STRING tp;tp.Format("Bind.no.1:%s",GetErrorStr());
		throw tp ;	
	}
	tpserver =*(SOCKADDR*)&sinAddress;
}

template <class STRING>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩高清影院| 一区二区三区成人在线视频| 中文字幕在线一区免费| 天天av天天翘天天综合网色鬼国产| 精品一区免费av| 欧美视频一区二区三区在线观看| 国产亚洲女人久久久久毛片| 蜜臀av性久久久久蜜臀av麻豆| 99久久精品国产麻豆演员表| 久久久久国产精品厨房| 蜜桃视频一区二区| 欧美精品欧美精品系列| 一区二区三区免费在线观看| 成人国产在线观看| 国产女人aaa级久久久级| 九九国产精品视频| 日韩三级电影网址| 免费观看日韩电影| 欧美一区二区福利在线| 婷婷综合在线观看| 欧美视频一区二区在线观看| 亚洲免费看黄网站| 色婷婷综合激情| 亚洲精品免费在线播放| 色哟哟国产精品免费观看| 1000部国产精品成人观看| 成人av影视在线观看| 国产精品免费丝袜| 欧美日韩视频在线观看一区二区三区 | 在线观看日产精品| 亚洲人成精品久久久久久| 一本一道久久a久久精品| 亚洲欧美成人一区二区三区| 色婷婷综合久久| 亚洲第一主播视频| 在线成人av网站| 精品一区二区久久久| 国产欧美综合在线观看第十页| 精品一区二区三区欧美| 久久综合一区二区| 成人黄色网址在线观看| |精品福利一区二区三区| 色综合色综合色综合色综合色综合 | 国产成人aaaa| 中文字幕亚洲一区二区va在线| av午夜一区麻豆| 一区二区三区不卡在线观看| 欧美日韩在线精品一区二区三区激情| 五月婷婷另类国产| 日韩美一区二区三区| 国产九色sp调教91| 亚洲色图视频免费播放| 欧美日产国产精品| 久久66热re国产| 国产精品女主播av| 欧美日韩三级一区| 国产揄拍国内精品对白| 国产精品久久久久久妇女6080| 色欧美片视频在线观看在线视频| 亚洲gay无套男同| 久久综合九色综合久久久精品综合| 国产精品综合av一区二区国产馆| 一区二区中文视频| 在线不卡免费av| 国产成人免费xxxxxxxx| 亚洲一二三四在线| 久久久国际精品| 欧美日韩一区精品| 成人小视频免费在线观看| 亚洲影院理伦片| 久久久国产精华| 欧美精品国产精品| 北条麻妃国产九九精品视频| 日韩专区在线视频| 亚洲天堂中文字幕| 精品黑人一区二区三区久久 | 正在播放亚洲一区| 丁香五精品蜜臀久久久久99网站| 亚洲一区在线电影| 国产日本欧洲亚洲| 日韩三级.com| 欧美三级日本三级少妇99| 国产99久久久国产精品潘金 | 岛国一区二区三区| 蜜臀久久久99精品久久久久久| 亚洲欧洲精品一区二区三区| 欧美哺乳videos| 欧美日韩在线精品一区二区三区激情| 国产精品一二三四区| 丝瓜av网站精品一区二区 | 日韩久久久精品| 欧美午夜一区二区| 欧美成人女星排行榜| 色女孩综合影院| 99国产精品国产精品久久| 国内成人精品2018免费看| 日韩国产精品久久| 亚洲一区二区av电影| 亚洲欧洲在线观看av| 国产欧美一二三区| 久久精品亚洲麻豆av一区二区| 欧美一二三区在线观看| 51久久夜色精品国产麻豆| 91福利在线播放| 色网综合在线观看| 91在线观看地址| 色婷婷av一区| 日本精品裸体写真集在线观看| a美女胸又www黄视频久久| 国产精品77777| 成人一二三区视频| 成人午夜精品在线| 国产 欧美在线| 成人18视频在线播放| 高清国产午夜精品久久久久久| 国产成人自拍网| 国产成人av影院| 成人一区二区视频| 91丨porny丨国产入口| 91在线国产观看| 色综合久久久久网| 欧美日本在线看| 日韩视频123| 2014亚洲片线观看视频免费| 日本一区二区综合亚洲| 国产精品美女久久久久久久| 亚洲视频 欧洲视频| 亚洲成人午夜影院| 九色综合狠狠综合久久| 国产激情视频一区二区三区欧美| 国产sm精品调教视频网站| 91免费观看在线| 欧美肥妇bbw| 久久久国产精品午夜一区ai换脸| 国产精品免费视频一区| 亚洲成人免费看| 国产最新精品免费| 99视频有精品| 日韩一区二区电影在线| 欧美极品aⅴ影院| 亚洲自拍偷拍网站| 国产一区二区三区美女| 99久久99精品久久久久久| 欧美精品乱码久久久久久按摩| 久久久蜜桃精品| 亚洲国产视频在线| 国产成人午夜精品影院观看视频| 91色九色蝌蚪| 久久新电视剧免费观看| 国产精品视频你懂的| 婷婷国产在线综合| 成人免费视频网站在线观看| 欧美日韩三级一区二区| 国产精品乱人伦中文| 日韩成人一级大片| 91网站最新网址| 久久综合给合久久狠狠狠97色69| 亚洲欧洲综合另类| 国产一区二区不卡| 欧美一区二区二区| 国产精品美女www爽爽爽| 男女男精品网站| 欧美无砖专区一中文字| 欧美极品xxx| 国产在线精品不卡| 欧美年轻男男videosbes| 国产精品国产a级| 国产一区二区免费看| 欧美精品一二三四| 一区二区三区欧美视频| 成人涩涩免费视频| 久久―日本道色综合久久| 丝瓜av网站精品一区二区| 色综合一个色综合| 国产欧美日韩精品一区| 麻豆精品视频在线观看| 91.xcao| 午夜亚洲国产au精品一区二区| 99久久99精品久久久久久| 国产欧美日韩精品a在线观看| 日本va欧美va瓶| 欧美精品久久99久久在免费线| 一区二区三区四区蜜桃| www.在线成人| 中文字幕欧美区| zzijzzij亚洲日本少妇熟睡| 日本一区免费视频| 成人性生交大片免费看视频在线| 久久久精品国产免费观看同学| 麻豆成人免费电影| 日韩欧美第一区| 捆绑紧缚一区二区三区视频| 欧美一区二区三区喷汁尤物| 日本欧美韩国一区三区| 欧美一区欧美二区| 美洲天堂一区二卡三卡四卡视频| 日韩一级完整毛片| 另类小说综合欧美亚洲| 亚洲精品一区二区三区精华液| 麻豆精品久久精品色综合|