亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产日韩欧美a| 美国一区二区三区在线播放| 午夜视黄欧洲亚洲| 国产91丝袜在线播放九色| 91成人国产精品| 欧美国产97人人爽人人喊| 婷婷综合五月天| a级精品国产片在线观看| 日韩你懂的电影在线观看| 亚洲人精品午夜| 成人免费视频网站在线观看| 欧美videossexotv100| 亚洲高清在线视频| 色哟哟国产精品| 国产午夜精品一区二区三区四区 | 国产精品女主播av| 麻豆精品在线播放| 欧美日韩精品一区二区| 亚洲人被黑人高潮完整版| 风间由美性色一区二区三区| 91麻豆精品久久久久蜜臀 | 国产欧美精品一区二区色综合朱莉| 日日夜夜精品视频天天综合网| 97精品久久久午夜一区二区三区| 久久免费视频一区| 精品一区二区三区免费视频| 欧美日韩不卡视频| 日韩av中文在线观看| 欧美电影在线免费观看| 日韩精品电影一区亚洲| 成人一区二区三区视频 | 韩国av一区二区三区四区| 欧美岛国在线观看| 国内成+人亚洲+欧美+综合在线 | 久久精品久久99精品久久| 欧美一区二区三区电影| 亚洲国产精品一区二区久久 | 成人av一区二区三区| 国产日韩成人精品| 成人高清视频在线观看| 中文字幕亚洲区| 在线视频国产一区| 亚洲成av人片| 日韩视频免费观看高清在线视频| 丝袜美腿亚洲色图| 日韩欧美成人一区二区| 国产一区美女在线| 欧美激情一区二区三区全黄| 97国产一区二区| 一区二区三区四区蜜桃 | 色综合久久中文字幕综合网| 亚洲一区二区欧美激情| 日韩精品一区国产麻豆| 丁香另类激情小说| 亚洲午夜一二三区视频| 日韩美女在线视频| av在线播放成人| 亚洲午夜激情av| 欧美一二区视频| 成人黄色网址在线观看| 亚洲h在线观看| 久久蜜臀中文字幕| 在线观看国产日韩| 国内外精品视频| 亚洲激情综合网| 日韩一级免费观看| 99久久精品一区| 麻豆成人久久精品二区三区红| 久久久国际精品| 欧美日韩国产区一| 粉嫩av一区二区三区粉嫩 | 最新日韩av在线| 91麻豆精品国产91久久久| 国产精品一区2区| 天天综合天天综合色| 久久精品视频免费| 在线不卡中文字幕播放| 成人性色生活片| 日本aⅴ精品一区二区三区| 国产精品传媒视频| 欧美mv日韩mv| 欧美亚洲另类激情小说| 成人在线综合网| 久久国产精品区| 亚洲制服丝袜在线| 中文字幕日本乱码精品影院| 日韩免费电影一区| 欧美日韩国产一二三| av电影一区二区| 国产乱子轮精品视频| 日本麻豆一区二区三区视频| 亚洲三级小视频| 国产精品女上位| 久久久久9999亚洲精品| 69堂精品视频| 欧美曰成人黄网| 97精品电影院| 99综合电影在线视频| 国产精品亚洲人在线观看| 免费亚洲电影在线| 无码av免费一区二区三区试看| 亚洲欧美综合另类在线卡通| 国产亚洲一区二区在线观看| 日韩精品一区二区三区在线观看 | 国产91在线看| 久久国产精品免费| 日产欧产美韩系列久久99| 亚洲国产综合91精品麻豆| 有坂深雪av一区二区精品| 亚洲视频在线一区观看| 综合久久久久久久| 亚洲欧美色一区| 亚洲免费看黄网站| 夜夜精品浪潮av一区二区三区| 国产精品免费观看视频| 国产精品嫩草影院av蜜臀| 成人av免费在线观看| 亚洲美女视频一区| 亚洲精品在线免费观看视频| 欧美一级二级三级蜜桃| 日韩久久久精品| 欧美成人精品1314www| 精品99久久久久久| 久久久精品免费免费| 中文字幕国产一区二区| 亚洲欧洲日产国码二区| 中文字幕一区二区三区av| 中文字幕在线观看一区| 亚洲另类色综合网站| 亚洲国产成人va在线观看天堂| 艳妇臀荡乳欲伦亚洲一区| 午夜精品久久久久久久| 日本午夜一区二区| 韩国精品主播一区二区在线观看 | 亚洲人成亚洲人成在线观看图片 | 国产精品久久国产精麻豆99网站| 国产精品久久久久久久久免费樱桃 | 日韩美女一区二区三区| 欧美精品一区二区蜜臀亚洲| 国产日韩欧美精品电影三级在线| 欧美色图12p| 日韩精品一级二级| 在线91免费看| 久久女同性恋中文字幕| 中文字幕色av一区二区三区| 亚洲一区二区五区| 久久国产综合精品| 91老司机福利 在线| 制服丝袜激情欧洲亚洲| 久久精品亚洲精品国产欧美 | 亚洲视频一二三区| 免费在线观看一区| 99在线精品一区二区三区| 欧美一区二区三区电影| 中文字幕制服丝袜一区二区三区| 亚洲成人午夜影院| 成人一区在线观看| 7799精品视频| 亚洲欧美一区二区不卡| 紧缚捆绑精品一区二区| 欧美性生活一区| 久久精品一区二区三区四区| 亚洲成人免费av| 成人91在线观看| 日韩亚洲欧美高清| 亚洲精品国产一区二区精华液| 久久精工是国产品牌吗| 欧美图片一区二区三区| 亚洲国产精品成人久久综合一区| 日日欢夜夜爽一区| 成人aaaa免费全部观看| 亚洲精品一区二区三区99| 亚洲成人在线免费| 91小视频在线观看| 久久精品网站免费观看| 奇米综合一区二区三区精品视频| 91亚洲精品久久久蜜桃网站| 久久精品一区二区三区av| 免费在线观看日韩欧美| 欧美日韩免费观看一区二区三区| 欧美激情一区二区在线| 黑人精品欧美一区二区蜜桃| 欧美日韩一区高清| 一区二区免费在线| 波多野结衣一区二区三区| 欧美精品一区男女天堂| 青青草国产精品97视觉盛宴| 欧美日本精品一区二区三区| 亚洲精品乱码久久久久久久久| 成人一道本在线| 国产三级精品三级在线专区| 国产在线不卡一区| 久久一区二区视频| 麻豆91免费看| 日韩欧美成人一区| 精品一区二区三区在线观看| 日韩一区二区电影网| 久久se这里有精品| 亚洲精品一区二区三区99| 国产一区二区按摩在线观看|