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

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

?? sock_common.h

?? 實現多線程聊天室
?? H
字號:


#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

#define MAX_LINE_SIZE	1024
#define INIT_READBUFFER(B)  B.read_count = 0

typedef struct ReadBuffer_t
{
	int read_count;
	char *read_ptr;
	char read_buf[MAX_LINE_SIZE];
} ReadBuffer;

/***************************************************************************************************************
 sockerror 用來輸出網絡函數的錯誤信息
***************************************************************************************************************/
void sockerror(const char *format, ...)
{
	int errno;
	va_list	args;

	va_start(args, format);
	fprintf(stderr, format, args);
	va_end(args);

	errno = WSAGetLastError();

	switch (errno)
	{
		case WSAEADDRINUSE:
			fprintf(stderr,"WSAEADDRINUSE:The specified address is already in use.");
			break;
		case WSAEADDRNOTAVAIL:
			fprintf(stderr,"WSAEADDRNOTAVAIL:The specified address is not available from the local machine.");
			break;
		case WSAEAFNOSUPPORT:
			fprintf(stderr,"WSAEAFNOSUPPORT:Addresses in the specified family cannot be used with this socket.");
			break;
		case WSAECONNREFUSED:
			fprintf(stderr,"WSAECONNREFUSED:The attempt to connect was forcefully rejected.");
			break;
		case WSAEDESTADDRREQ:
			fprintf(stderr,"WSAEDESTADDRREQ:A destination address is required.");
			break;
		case WSAEFAULT:
			fprintf(stderr,"WSAEFAULT:The lpSockAddrLen argument is incorrect.");
			break;
		case WSAEINVAL:
			fprintf(stderr,"WSAEINVAL:The socket is already bound to an address.");
			break;
		case WSAEISCONN:
			fprintf(stderr,"WSAEISCONN:The socket is already connected.");
			break;
		case WSAEMFILE:
			fprintf(stderr,"WSAEMFILE:No more file descriptors are available.");
			break;
		case WSAENETUNREACH:
			fprintf(stderr,"WSAENETUNREACH:The network cannot be reached from this host at this time.");
			break;
		case WSAENOBUFS:
			fprintf(stderr,"WSAENOBUFS:No buffer space is available. The socket cannot be connected.");
			break;
		case WSAENOTCONN:
			fprintf(stderr,"WSAENOTCONN:The socket is not connected.");
			break;
		case WSAENOTSOCK:
			fprintf(stderr,"WSAENOTSOCK:The descriptor is a file, not a socket.");
			break;
		case WSAETIMEDOUT:
			fprintf(stderr,"WSAETIMEDOUT:The attempt to connect timed out without establishing a connection. ");
			break;
		default:
			fprintf(stderr,"WSAEError: Unknown! ");
			break;	
	}
	fprintf(stderr,"\n");
}


/***************************************************************************************************************
 readline 用來從網絡中讀取一行,采用一次讀一個字符的方式
 ***************************************************************************************************************/
int ReadLine1(SOCKET s,char FAR *buf,int max_len)
{
	char c,*ptr;
	int n,rc;

	ptr = buf;
	for(n = 1;n < max_len;n++)
	{
		rc = recv(s,&c,1,0);
		if(rc == 1)
		{
			*ptr++ = c;
			if(c == '\n')
				break;
		}
		else		// EOF or SOCKET_ERROR
		{
			if(n==1)   // no data read
				return rc;
			else
				break;
		}
	}

	*ptr = 0;
	return n;
}


/***************************************************************************************************************
  ReadLine 用來從網絡中讀取一行,先將數據讀取到Buffer中,再從Buffer中讀取一行
 ***************************************************************************************************************/

static int my_read(SOCKET s,char *ptr,ReadBuffer *pRB)
{
	if( pRB->read_count <= 0)
	{
		pRB->read_count = recv(s,pRB->read_buf,MAX_LINE_SIZE,0);
		if(pRB->read_count <= 0)		// EOF or SOCKET_ERROR
			return pRB->read_count;
		
		pRB->read_ptr = pRB->read_buf;
	}

	pRB->read_count--;
	*ptr = *pRB->read_ptr++;
	return 1;
}

int ReadLine(SOCKET s,char FAR *buf,int max_len,ReadBuffer *pRB)
{
	char c,*ptr;
	int n,rc;

	ptr = buf;
	for(n = 1;n < max_len;n++)
	{
		rc = my_read(s,&c,pRB);
		if(rc == 1)
		{
			*ptr++ = c;
			if(c == '\n')
				break;
		}
		else		// EOF or SOCKET_ERROR
		{
			if(n==1)  // no data read
				return 0;
			else
				break;
		}
	}

	*ptr = 0;
	return n;
}

int Read(SOCKET s,char FAR *buf,int n,ReadBuffer *pRB)
{
	int rc;
	if(pRB->read_count > 0)
	{
		rc = (pRB->read_count < n) ? pRB->read_count:n;
		memcpy(buf,pRB->read_ptr,rc);
		pRB->read_count -= rc;
		pRB->read_ptr += rc;
		return rc;
	}
	rc = recv(s,buf,n,0);
	return rc;
}

/***************************************************************************************************************
  ReadN 用來從網絡中讀取n個字節
 ***************************************************************************************************************/
int ReadN(SOCKET s,char FAR *buf,int n,ReadBuffer *pRB)
{
	int count = 0;
	int rc;
	
	if(pRB->read_count > 0)
	{
		rc = (pRB->read_count < n) ? pRB->read_count:n;
		memcpy(buf,pRB->read_ptr,rc);
		pRB->read_count -= rc;
		pRB->read_ptr += rc;
		count = rc;
	}

	while(count < n)
	{
		rc = recv(s,buf + count,n - count,0);
		if(rc <= 0)
			break;
		count += rc;
	}

	return count;
}

/***************************************************************************************************************
  WriteN 用來從網絡中寫取n個字節
 ***************************************************************************************************************/
int WriteN(SOCKET s,char FAR *buf,int n)
{
	int count = 0;
	int sc;
	while(count < n)
	{
		sc = send(s,buf + count,n - count,0);
		if(sc < 0)
			return sc;
		if(sc == 0)
			Sleep(100);
		count += sc;
	}

	return count;
}

/***************************************************************************************************************
 Constructsockaddr 用來從根據地址strAddr和端口strPort自動構造好一個地址機構
 他會自動判斷strAddr是域名還是IP地址,然后進行相應轉換
 ***************************************************************************************************************/
int ConstructSockaddr(SOCKADDR_IN* paddr_in,char * strAddr,char * strPort)
{
	unsigned short port;
	struct hostent* phostent;

	port = atoi(strPort);
	if (port == 0)
		return 0;

	paddr_in->sin_family = AF_INET;
	paddr_in->sin_port = htons(port);   
	paddr_in->sin_addr.s_addr = inet_addr(strAddr);
	
	if(paddr_in->sin_addr.s_addr != INADDR_NONE)
		return 1;

	phostent = gethostbyname(strAddr);
	if (phostent == NULL)
	{
		sockerror("Resove name %s error!",strAddr);
		return 0;
	}

	paddr_in->sin_addr = *((IN_ADDR*) phostent->h_addr);
	if(paddr_in->sin_addr.s_addr != INADDR_NONE)
		return 1;
	
	return 0;
}



















?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲已满18点击进入久久| 国产精品欧美综合在线| 亚洲狠狠爱一区二区三区| 丁香一区二区三区| 国产精品国产自产拍在线| 91麻豆精品秘密| 亚洲欧美日韩国产综合| 一本到三区不卡视频| 亚洲精品自拍动漫在线| 3d动漫精品啪啪一区二区竹菊| 亚洲一区在线视频| 国产偷国产偷亚洲高清人白洁| 国产99久久久国产精品潘金| 一区二区激情视频| 精品国产免费一区二区三区四区| 中文字幕在线一区二区三区| 欧美日韩dvd在线观看| 韩国三级电影一区二区| 亚洲另类在线一区| 9191成人精品久久| 天天色天天操综合| 亚洲欧美另类小说| 国产精品视频一二| 欧美日韩国产首页在线观看| 国产一区二区在线影院| 久久精品亚洲精品国产欧美| 欧美三电影在线| 国产在线精品一区二区夜色| 久久久青草青青国产亚洲免观| 欧美最猛黑人xxxxx猛交| www.欧美.com| 蜜臀av一区二区在线观看| 久久精品视频在线免费观看| 欧美日韩大陆在线| 欧美亚洲综合网| 色网综合在线观看| 色一区在线观看| 色婷婷综合久久久久中文 | 日韩一区二区在线免费观看| 欧洲激情一区二区| 99精品视频在线免费观看| 不卡一区中文字幕| 欧美性受xxxx| 欧美成人免费网站| 久久久久国产成人精品亚洲午夜 | 欧美韩日一区二区三区四区| 26uuu亚洲| 久久久久久麻豆| 中文字幕一区二区日韩精品绯色| 国产欧美日韩另类一区| 亚洲欧美激情视频在线观看一区二区三区 | 激情欧美一区二区| 成人午夜私人影院| 欧美在线观看18| 日韩欧美黄色影院| 欧美国产激情二区三区| 综合婷婷亚洲小说| 亚洲成人午夜影院| 国产成人精品免费在线| 欧美久久一二区| 久久久不卡网国产精品二区| 亚洲精品国产第一综合99久久 | 久久久久久久久99精品| 亚洲国产精品人人做人人爽| 国产精品中文有码| 7777精品伊人久久久大香线蕉超级流畅 | av在线不卡免费看| 91精品国产综合久久蜜臀| 日韩毛片精品高清免费| 午夜精品123| av在线免费不卡| 中文字幕免费一区| 精品一区二区三区在线观看国产 | 精品亚洲porn| 日韩午夜中文字幕| 男女男精品网站| 欧美久久婷婷综合色| 日韩高清不卡一区二区| 欧美无人高清视频在线观看| 欧美精品tushy高清| 免费观看成人鲁鲁鲁鲁鲁视频| 秋霞电影一区二区| 国产经典欧美精品| 欧美日本韩国一区| 亚洲福利一区二区| 欧美伊人久久久久久久久影院| 国产精品毛片久久久久久| 玖玖九九国产精品| 精品美女一区二区三区| 蜜臀久久99精品久久久画质超高清 | 国产成人精品亚洲日本在线桃色| 欧美精品aⅴ在线视频| av在线不卡电影| 日本v片在线高清不卡在线观看| 日本高清视频一区二区| 亚洲欧美一区二区三区孕妇| 色8久久人人97超碰香蕉987| 亚洲综合一区在线| 91精品福利在线一区二区三区 | 九色综合狠狠综合久久| 久久奇米777| 一本到高清视频免费精品| 韩国欧美国产一区| 亚洲精品国产第一综合99久久| 欧美精品1区2区| 91麻豆免费看| 成人综合婷婷国产精品久久蜜臀 | 欧美精品一区二区三区一线天视频| www.亚洲人| 另类欧美日韩国产在线| 亚洲精品videosex极品| 欧美tickle裸体挠脚心vk| 色综合久久精品| 国产主播一区二区三区| 美女被吸乳得到大胸91| 成人免费在线视频观看| 国产日韩欧美亚洲| 欧亚一区二区三区| 精品一区二区三区不卡| 一区二区在线看| 亚洲男人的天堂一区二区| 日本一区二区三区免费乱视频| 日韩写真欧美这视频| 日韩午夜激情av| 欧美三级资源在线| 欧美日韩免费电影| 欧美三级电影在线观看| 国产一区在线视频| 午夜精品福利视频网站| 天天综合网 天天综合色| 日一区二区三区| 精品在线一区二区| 不卡电影一区二区三区| 欧美日韩国产首页| 国产三级精品在线| 久久精品亚洲麻豆av一区二区| 精品美女一区二区| 久久精品亚洲精品国产欧美| 国产精品国模大尺度视频| 一区二区成人在线视频| 午夜精品123| 成人高清免费在线播放| 欧美v亚洲v综合ⅴ国产v| xnxx国产精品| 亚洲免费观看视频| 亚洲精品免费看| 天天色综合成人网| 国产精品1区2区| 欧美高清性hdvideosex| 国产欧美日韩另类视频免费观看 | 99久久精品国产麻豆演员表| 在线一区二区视频| 国产亚洲综合色| 亚洲欧美电影院| 一区二区久久久| 欧美日韩精品一区二区在线播放| 久久亚洲欧美国产精品乐播| 天堂久久久久va久久久久| caoporen国产精品视频| 欧美成人高清电影在线| 亚洲激情一二三区| 欧美自拍丝袜亚洲| 国产精品久久夜| 成人国产电影网| 中文子幕无线码一区tr| 国内精品国产三级国产a久久| 欧美日韩不卡一区| 亚洲综合视频网| 欧美日韩午夜精品| 亚洲一二三区视频在线观看| 色丁香久综合在线久综合在线观看 | 国产麻豆欧美日韩一区| 国产精品无人区| 欧美性猛交一区二区三区精品| 日韩高清一区二区| 最新热久久免费视频| 日韩一级高清毛片| 一本色道亚洲精品aⅴ| 国产精品18久久久久久久网站| 中文字幕一区二区三区色视频| 欧美日韩性生活| av成人老司机| 国产大片一区二区| 美女免费视频一区| 亚洲大尺度视频在线观看| 中文字幕 久热精品 视频在线| 欧美日韩在线播放三区四区| 色婷婷av久久久久久久| 国产99精品在线观看| 成人免费视频播放| 久久成人免费网| 国产精品一卡二卡| 美女视频黄免费的久久| 久久99最新地址| 免费在线看成人av| 精久久久久久久久久久| 强制捆绑调教一区二区| 麻豆精品国产91久久久久久| 麻豆久久久久久久| 国产精品18久久久久久久久久久久|