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

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

?? socket.c

?? CBS(小區廣播)程序實現手稿
?? C
字號:
#include "..\sys\Include.h"

int WaitTimer(int nSocketId,long TimeSec,long TimeUsec);


void ReceCBEMessage();

int initsocket()
{
	struct sockaddr_in server;
	int errorNo;
	int s;
	WSADATA ws;

	WSAStartup(MAKEWORD(1,1),&ws);
	if ((s=socket(AF_INET, SOCK_STREAM, 0))<0)
	{
        errorNo=WSAGetLastError();
		perror("Socket()");
		return -1;
	}

	memset(&server,0,sizeof(server));
	server.sin_family = AF_INET;
	server.sin_port = htons(USERPORT);
	server.sin_addr.s_addr = INADDR_ANY;
	if (bind(s, (struct sockaddr *)&server, sizeof(server))<0)
	{
		perror("Bind()");
		return -1;
	}
	if (listen(s,5)!=0)
	{
		perror("Listen()");
		return -1;
	}

	printf("Socket register successfully.\n");
	return s;
}

void ListenUser(int *sockethandle)
{
	struct sockaddr_in client;
    int namelen;
	int ns;
	int s1;

    s1=*sockethandle;
	namelen = sizeof(client);
	while (1)
	{
    memset(&client,0,namelen);
	if ((ns = accept(s1, (struct sockaddr *)&client, &namelen)) ==-1)
	{
		perror("Accept()");
        break;  
	}
	else
	{
		if (s_RuntimeInfo.CBCProxyConnectStatus==SOCKET_DISCONNECTED)
		{
			printf("Socket Accept!\n");
			s_RuntimeInfo.CBCProxySocketHandle=ns;
			s_RuntimeInfo.CBCProxyConnectStatus=SOCKET_CONNECTED;
        	CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ReceCBEMessage,NULL,0,NULL);
	
		}
		else
		{
			printf("Socket already Connect,New Connection will stop!\n");
			closesocket(ns);
		}
	}
	}
	ExitThread(1);    
}



int RecvData(int nSocketId, char *sBuf )
{
    int nRecvLen = -1 ;
	int received = 0,total = 0 ;

#ifdef  OPEN_WARNING
	/* 告警描述字串 */
	unsigned char  cWarningDescription[WARNING_DESC_LEN];
#endif
  	
	if (( nRecvLen = recv( nSocketId ,sBuf , PACKHEADLEN , 0) ) == PACKHEADLEN ) 
    {
		nRecvLen = *(short *)sBuf;

		if ( nRecvLen > MAXDATALEN || nRecvLen <= 0 ) 
		{
#ifdef  OPEN_WARNING
			/* 告警 */
			memset(cWarningDescription,0,WARNING_DESC_LEN);
			sprintf(cWarningDescription,"IP包長錯誤,Len=%d",nRecvLen);
			SendWarningToOmp(LINK_WARNING,ERROR_PACK,cWarningDescription);			
#endif
			/* 使告警有可能發出去 */
			Sleep(2000);

			printf("packet length is too long or invalid.\r\n"); 
			return -1 ;                //actual usage
		}
    
		while(1)
		{
			if (WaitTimer(nSocketId,1,0)==FAILURE)
				return FAILURE;
			received = recv( nSocketId , sBuf+total+PACKHEADLEN , nRecvLen-total , 0 ) ;

			if (received <= 0) return -1;
			total += received ;
			if (total  >= nRecvLen) break;
		}
		
		return nRecvLen ;

	}

	return -1 ; 
}

int WaitTimer(int nSocketId,long TimeSec,long TimeUsec)
{
	fd_set FDSet;
	TIMEVAL TimeVal;
  	
	TimeVal.tv_sec = TimeSec;
	TimeVal.tv_usec = TimeUsec;

	FD_ZERO(&FDSet);
	FD_SET(nSocketId,&FDSet);

	if (select(0,&FDSet,NULL,NULL,&TimeVal)<=0)
		return FAILURE;
	return SUCCESS;
}

/* 將消息加入接收消息隊列中	*/ 
void AppendCBERecvMsg(CBEMESSAGE_t *s_CBEMessage)
{
#ifdef  OPEN_WARNING
	unsigned char cWarningDescription[WARNING_DESC_LEN];
#endif

	if(Rece_CBE_Buf.iMsgCount==MSG_QUEUE_SIZE)
	{
#ifdef  OPEN_WARNING
		/* 告警 */
		memset(cWarningDescription,0,sizeof(WARNING_DESC_LEN));
     	sprintf(cWarningDescription,"接收消息隊列已滿");
    	SendWarningToOmp(LINK_WARNING,IP_INPUT_QUEUE,cWarningDescription);
#endif
	}

	WaitForSingleObject(Rece_CBE_Buf.MsgEmpty,INFINITE);
	WaitForSingleObject(Rece_CBE_Buf.MsgMutex,INFINITE);
	
	memcpy(&Rece_CBE_Buf.s_Message[Rece_CBE_Buf.iTail],s_CBEMessage,sizeof(CBEMESSAGE_t));

	if (++Rece_CBE_Buf.iTail==MSG_QUEUE_SIZE) 
	{
		Rece_CBE_Buf.iTail = 0;
		Rece_CBE_Buf.iMsgCount++;
	}
	ReleaseMutex(Rece_CBE_Buf.MsgMutex);
	ReleaseSemaphore(Rece_CBE_Buf.MsgFull,1,NULL);

}

/* 從接收消息緩沖區中取出一條消息信息 */
void GetCBERecvMsg(CBEMESSAGE_t *NewCBEMsg)
{
	WaitForSingleObject(Rece_CBE_Buf.MsgFull,INFINITE);
	WaitForSingleObject(Rece_CBE_Buf.MsgMutex,INFINITE);
	memcpy(NewCBEMsg, &Rece_CBE_Buf.s_Message[Rece_CBE_Buf.iHead],sizeof(CBEMESSAGE_t));
	if (++Rece_CBE_Buf.iHead==MSG_QUEUE_SIZE) 
	{
		Rece_CBE_Buf.iHead = 0;
		Rece_CBE_Buf.iMsgCount--;
	}
	ReleaseMutex(Rece_CBE_Buf.MsgMutex);
	ReleaseSemaphore(Rece_CBE_Buf.MsgEmpty,1,NULL);
}

/* 將消息加入發送消息隊列中	*/
void AppendCBESendMessage(CBEMESSAGE_t *s_CBEMessage)
{

	WaitForSingleObject(Send_CBE_Buf.MsgEmpty,INFINITE);
	WaitForSingleObject(Send_CBE_Buf.MsgMutex,INFINITE);
	
	memcpy(&Send_CBE_Buf.s_Message[Send_CBE_Buf.iTail],s_CBEMessage,s_CBEMessage->iLen+2);

	if (++Send_CBE_Buf.iTail==MSG_QUEUE_SIZE) 
	{
		Send_CBE_Buf.iTail = 0;
		Send_CBE_Buf.iMsgCount++;
	}
	ReleaseMutex(Send_CBE_Buf.MsgMutex);
	ReleaseSemaphore(Send_CBE_Buf.MsgFull,1,NULL);

}

/* 從發送消息緩沖區中取出一條消息信息 */
void GetCBESendMsg(CBEMESSAGE_t *NewCBEMsg)
{
	WaitForSingleObject(Send_CBE_Buf.MsgFull,INFINITE);
	WaitForSingleObject(Send_CBE_Buf.MsgMutex,INFINITE);
	memcpy(NewCBEMsg, &Send_CBE_Buf.s_Message[Send_CBE_Buf.iHead],sizeof(CBEMESSAGE_t));
	if (++Send_CBE_Buf.iHead==MSG_QUEUE_SIZE) 
	{
		Send_CBE_Buf.iMsgCount--;
		Send_CBE_Buf.iHead = 0;
	}
	ReleaseMutex(Send_CBE_Buf.MsgMutex);
	ReleaseSemaphore(Send_CBE_Buf.MsgEmpty,1,NULL);
}

/* 接收CBE消息 */
void ReceCBEMessage()
{
//	int sHanlde;
	CBEMESSAGE_t s_CBEMessage;

	memset(&s_CBEMessage,0,sizeof(CBEMESSAGE_t));

//	sHanlde=*sockethandle;

	for (;;)
	{
		if (RecvData(s_RuntimeInfo.CBCProxySocketHandle,(char *)&s_CBEMessage)<0)
		{
			break;
		}
//		s_CBEMessage.SocketHandle=sHanlde;
		AppendCBERecvMsg(&s_CBEMessage);
	    memset(&s_CBEMessage,0,sizeof(CBEMESSAGE_t));
	}
	closesocket(s_RuntimeInfo.CBCProxySocketHandle);
    s_RuntimeInfo.CBCProxyConnectStatus=SOCKET_DISCONNECTED;
	printf("Client Connect exit.\n");
	ExitThread(1);    
}

/* 發送函數 */
int SendData(int nSocketId,unsigned char *sBuf,int nLen )
{
	fd_set FDSet;
	TIMEVAL TimeVal;
  	
	TimeVal.tv_sec = 10;
	TimeVal.tv_usec = 0;

	FD_ZERO(&FDSet);
	FD_SET(nSocketId,&FDSet);
	if (select(0,NULL,&FDSet,NULL,&TimeVal)<=0)  return -1;
	return  send(nSocketId, sBuf, nLen, 0);
}


//發送CBE消息
void SendCBEMessage()
{
	CBEMESSAGE_t s_CBEMessage;
//	int nSocketId;
	
	memset(&s_CBEMessage,0,sizeof(CBEMESSAGE_t));

	for (;;)
	{
		GetCBESendMsg(&s_CBEMessage);
//		nSocketId=s_CBEMessage.SocketHandle;
		
		if (SendData(s_RuntimeInfo.CBCProxySocketHandle,(char *)&s_CBEMessage,(s_CBEMessage.iLen+PACKHEADLEN) )<0)
		{
			closesocket(s_RuntimeInfo.CBCProxySocketHandle);

			s_RuntimeInfo.CBCProxyConnectStatus=SOCKET_DISCONNECTED;
		}
	    memset(&s_CBEMessage,0,sizeof(CBEMESSAGE_t));
	}

//	printf("Client Connect exit.\n");
//	ExitThread(1);    
}

//CBCtoCBE
void ReceCBCMsg(int *sockethandle)
{
	struct sockaddr_in client;
    int namelen;
	int ns;
	int s1;

    s1=*sockethandle;
	namelen = sizeof(client);
	while (1)
	{
		memset(&client,0,namelen);
	if ((ns = accept(s1, (struct sockaddr *)&client, &namelen)) ==-1)
	{
		perror("Accept()");
        break;  
	}
	else
	{
		printf("Socket Accept!\n");
    	CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ReceCBEMessage,&ns,0,NULL);
	}
	}
	ExitThread(1);    
}

//客戶端Socket
int TcpInit()
{
    WSADATA ws;
    return WSAStartup(MAKEWORD(1,1),&ws);
}

int OpenTcp()
{
    return socket(AF_INET, SOCK_STREAM,0);
}

int SetSocketBlock(int nId , int nFlag)
{
    static long nBlock  =0;
	static long nNoBlock=1;

    if ( nFlag == 1 )
         return ioctlsocket(nId,FIONBIO,&nBlock);
	else
         return ioctlsocket(nId,FIONBIO,&nNoBlock);
}

int ConnectSocket(int nSocketId , int nIp,int nPort)
{
    struct sockaddr_in rServer;

    memset(&rServer , 0 , sizeof(rServer));
    rServer.sin_family=AF_INET;
    rServer.sin_port=htons((short)nPort);
    rServer.sin_addr.s_addr= nIp;
    return connect(nSocketId,(struct sockaddr *)&rServer,sizeof(rServer));
}

int ConnectToServer( char *sAddr , int nPort )
{
	int nSocketId ;

	TcpInit();

	if ( (nSocketId = OpenTcp()) <= 0 ) 
	{
		printf(" fgdf register socketId Fail ....\n");
		return -1 ;
	}
	 
  	if ( ConnectSocket(nSocketId ,inet_addr( sAddr ) ,nPort) == 0 )
	{

		SetSocketBlock( nSocketId  , 1);	//阻塞方式
		printf("socket connect Succ ...\n");

		return nSocketId ;
	}
	return -1;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色嗨嗨av一区二区三区| 亚洲国产日韩一区二区| 国产精品小仙女| 国产欧美日产一区| 97精品国产露脸对白| 亚洲日本乱码在线观看| 91福利小视频| 久久精品国产99| 久久嫩草精品久久久精品一| 成人永久免费视频| 亚洲精品免费在线观看| 欧美乱妇15p| 国产一区美女在线| 亚洲欧洲av一区二区三区久久| 一本一道久久a久久精品| 亚洲一二三四久久| 欧美精品乱码久久久久久按摩| 黑人巨大精品欧美黑白配亚洲| 欧美国产精品专区| 欧美精品日韩精品| 国产东北露脸精品视频| 夜色激情一区二区| 337p日本欧洲亚洲大胆色噜噜| 国产一区二区影院| 中文字幕一区二区三区在线观看 | 久久综合九色欧美综合狠狠| 成人一道本在线| 婷婷成人激情在线网| 久久久蜜桃精品| 91久久线看在观草草青青| 婷婷综合五月天| 国产午夜精品一区二区三区视频 | 久久久国产一区二区三区四区小说 | 暴力调教一区二区三区| 亚洲成人av福利| 国产喂奶挤奶一区二区三区| 欧美午夜片在线观看| 国产成人丝袜美腿| 日本欧美韩国一区三区| 国产日韩欧美精品一区| 欧美日韩1234| a级精品国产片在线观看| 亚洲国产aⅴ天堂久久| 国产精品视频在线看| 欧美一区二区三级| 色播五月激情综合网| 国产成人av网站| 久久99精品久久久久久国产越南| 亚洲丝袜美腿综合| 国产夜色精品一区二区av| 51久久夜色精品国产麻豆| 91色视频在线| 懂色一区二区三区免费观看| 免费成人av在线| 亚洲国产一二三| 亚洲免费伊人电影| 中文字幕va一区二区三区| 精品国产乱码久久久久久牛牛| 欧美日韩免费高清一区色橹橹| av在线不卡观看免费观看| 韩国v欧美v日本v亚洲v| 美腿丝袜亚洲三区| 日韩激情视频在线观看| 亚洲一二三四在线| 亚洲福利一区二区| 亚洲色图.com| 亚洲一区二区3| 亚洲欧美色图小说| 中文字幕一区二区不卡| 国产喷白浆一区二区三区| www激情久久| 久久久久久久久久久久久夜| 欧美第一区第二区| 337p日本欧洲亚洲大胆精品 | 国产成人精品免费网站| 韩国女主播一区二区三区| 久久精品国产久精国产| 婷婷夜色潮精品综合在线| 午夜精品一区二区三区电影天堂 | 91美女在线观看| 97精品国产97久久久久久久久久久久| 国产69精品久久777的优势| 福利视频网站一区二区三区| 风间由美一区二区三区在线观看 | ●精品国产综合乱码久久久久| 国产精品卡一卡二卡三| 成人免费在线播放视频| 亚洲欧美综合另类在线卡通| 国产精品久久久久久妇女6080 | 亚洲一区二区四区蜜桃| 一区二区视频在线| 亚洲第一久久影院| 久久不见久久见免费视频7| 国产综合色产在线精品| 成人av一区二区三区| 91美女蜜桃在线| 欧美蜜桃一区二区三区| 亚洲精品在线免费观看视频| 中文字幕欧美国产| 亚洲狠狠丁香婷婷综合久久久| 婷婷亚洲久悠悠色悠在线播放 | 成人精品小蝌蚪| 色激情天天射综合网| 欧美日本国产视频| 国产人成亚洲第一网站在线播放| 欧美挠脚心视频网站| 欧美欧美欧美欧美首页| 欧美日韩色综合| 精品国产123| 一区二区三区精品视频在线| 亚洲欧美另类小说视频| 亚洲日本va午夜在线影院| 国产精品国产三级国产普通话99| 国产精品高潮久久久久无| 洋洋成人永久网站入口| 日韩av中文字幕一区二区| 久久精品国产亚洲aⅴ| av在线一区二区三区| 久久一二三国产| 成人免费小视频| 久久精品国产精品青草| 91在线观看高清| 日韩一卡二卡三卡四卡| 国产校园另类小说区| 一区二区视频在线| 国产成人免费视频网站高清观看视频 | 亚洲综合色区另类av| 国产成人av电影免费在线观看| 色综合久久久久网| 日韩福利视频网| 久久一夜天堂av一区二区三区| 亚洲福利一区二区三区| www.av亚洲| 麻豆久久久久久久| 欧美一区二区私人影院日本| 亚洲人精品午夜| 日本韩国欧美一区二区三区| 亚洲一区二区在线播放相泽| 成人av资源在线| 欧美一区二区三区公司| 2017欧美狠狠色| 亚洲视频狠狠干| 国产真实乱偷精品视频免| 制服丝袜亚洲网站| 亚洲成人免费影院| 亚洲另类在线制服丝袜| 亚洲欧美视频在线观看视频| 国产欧美日韩在线视频| 中文字幕不卡在线观看| 欧美a级理论片| 在线播放91灌醉迷j高跟美女| 亚洲女厕所小便bbb| 波多野结衣亚洲| 精品国产乱码久久久久久久久| 亚洲成a人片在线观看中文| 色中色一区二区| 亚洲乱码国产乱码精品精小说 | 国产一区二区不卡在线| 精品成人一区二区| 国产99精品在线观看| 国产精品五月天| 欧洲av在线精品| 蜜臀久久99精品久久久久宅男| 91精品国产色综合久久不卡电影| 青青草国产成人99久久| 国产精品沙发午睡系列990531| www.欧美日韩| 蜜桃av一区二区| 最新不卡av在线| 日韩欧美国产午夜精品| av在线这里只有精品| 午夜日韩在线观看| 国产午夜亚洲精品羞羞网站| 日本道精品一区二区三区| 韩国av一区二区三区在线观看| 国产精品久久久久一区| 欧美日韩大陆在线| 成人黄色一级视频| 久久99九九99精品| 丝袜美腿亚洲一区| 国产精品亲子乱子伦xxxx裸| 在线综合视频播放| 色噜噜狠狠成人网p站| 成人美女在线观看| 国产一区二区三区观看| 丰满白嫩尤物一区二区| 另类综合日韩欧美亚洲| 国产精品综合在线视频| 色综合天天做天天爱| 色综合久久久久网| 久久影院午夜论| 亚洲欧美日韩国产成人精品影院| 美国一区二区三区在线播放| 欧美午夜一区二区三区免费大片| 亚洲欧美一区二区不卡| 青青草97国产精品免费观看| 国产在线播放一区| 欧美a级一区二区| 日韩av一区二| 日本麻豆一区二区三区视频|