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

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

?? udpsocket.cpp

?? vxworks上的udpsocket的程序
?? CPP
字號:
/*****************************************************************

	Description:

		The definition for the class "CUdpSocket".

	Author:		tief@mail.eastcomtd.com

	Created date:	2002/10/30 14:00 PM


*****************************************************************/

#include "UdpSocket.h"

#include <string.h>

#ifdef WIN32

	#include <windows.h>

#endif

#ifdef VXWORKS 0

	#include <taskLib.h>
	#include <inetLib.h>
	#include <ioLib.h>

#endif

#include <stdlib.h>

#ifdef _DEBUG

	#include <stdio.h>

#endif

#ifdef VXWORKS 0

	#define INVALID_SOCKET ERROR
	#define SOCKET_ERROR ERROR

#endif

CUdpSocket::CUdpSocket()
{

#ifdef WIN32

	WSADATA wsd ;

	// Load the windows socket DLLs and initialize
	// the members.

	WSAStartup(MAKEWORD(2,2),&wsd) ;

	m_hThread = NULL ;

#endif

#ifdef VXWORKS 0

	m_hTask = NULL ;

#endif

	m_wm = user_receive ;
	m_bReady = false ;
	m_sockSender = NULL ;
	m_sockReceiver = NULL ;

	m_tvDelay.tv_sec=0 ;
	m_tvDelay.tv_usec=1 ;

	memset(&m_addrRemote,0,sizeof(SOCKADDR)) ;
}

STATUS CUdpSocket::SetWorkMode(workmode wm)
{
	if (m_bReady) return CANNOT_SETMODE ;

	m_wm = wm ;
	return OK ;
}

STATUS CUdpSocket::Init
	(int localport,const char * targetip,int remoteport)
{
	// Create the socket for data sending

	if ((m_sockSender=socket(AF_INET,SOCK_DGRAM,0))
		==INVALID_SOCKET)
	{

#ifdef _DEBUG

 		printf("run time error:") ;
 		printf("cann't create sender (socket).\n") ;

#endif

		OnInitComplete(SOCKET_CALL_FAILD) ;

		return SOCKET_CALL_FAILD ;
	}

	// Set port and remote host for sender

	m_addrRemote.sin_family=AF_INET ;
	m_addrRemote.sin_port=htons((short)remoteport) ;
	m_addrRemote.sin_addr.s_addr=inet_addr(targetip) ;

	// Create the socket for data sending

	if ((m_sockReceiver=socket(AF_INET,SOCK_DGRAM,0))
		==INVALID_SOCKET)
	{

#ifdef _DEBUG

 		printf("run time error:") ;
 		printf("cann't create receiver (socket).\n") ;

#endif

		OnInitComplete(SOCKET_CALL_FAILD) ;

		return SOCKET_CALL_FAILD ;
	}

	// Set port for receiver

	m_addrLocal.sin_family=AF_INET ;
	m_addrLocal.sin_port=htons((short)localport) ;
	m_addrLocal.sin_addr.s_addr=htonl(INADDR_ANY) ;

	if (bind(m_sockReceiver,(SOCKADDR*)&m_addrLocal,
		sizeof(m_addrLocal))==SOCKET_ERROR)
	{

#ifdef _DEBUG

 		printf("run time error:") ;
 		printf("cann't create receiver (bind).\n") ;

#endif

		OnInitComplete(BIND_CALL_FAILD) ;

		return BIND_CALL_FAILD ;
	}


	if (m_wm==auto_receive)
	{

		// Start the thread(task) for data receiving

#ifdef WIN32

		m_hThread = CreateThread(NULL,NULL,
			(LPTHREAD_START_ROUTINE)recvsrv,this,NULL,NULL) ;

#ifdef _DEBUG

		printf("threadid 0x%x loaded.\n",m_hThread) ;

#endif // _DEBUG

		if (m_hThread==NULL)
		{

#ifdef _DEBUG

 			printf("run time error:") ;
 			printf("cann't start receiver (thread).\n") ;

#endif // _DEBUG

			OnInitComplete(THREAD_CALL_FAILD) ;

			return THREAD_CALL_FAILD ;
		}

#endif // WIN32

#ifdef VXWORKS 0

		m_hTask = taskSpawn("recvsrv1",60,VX_FP_TASK,
			1024*40,(FUNCPTR)recvsrv,(int)this,
			0,0,0,0,0,0,0,0,0
			) ;

		if (m_hTask==ERROR)
		{

#ifdef _DEBUG

 			printf("run time error:") ;
 			printf("cann't start receiver (task).\n") ;

#endif // _DEBUG

			OnInitComplete(THREAD_CALL_FAILD) ;

			return THREAD_CALL_FAILD ;
		}
		else
		{

#ifdef _DEBUG

			printf("taskid 0x%x spawned.\n",m_hTask) ;

#endif // _DEBUG

		}


#endif // VXWORKS

	}

	// All the sockets and threads are loaded

	m_bReady = true ;
	OnInitComplete(OK) ;

	return OK ;
}

unsigned long CUdpSocket::recvsrv(void * pt)
{

	CUdpSocket * pthis = (CUdpSocket *)pt ;
	static char szBuf[4096] ;
	int iSockAddrSize = sizeof(sockaddr_in) ;
	static char szIpAddr[16] ;

	// Receive data form network.

	// When any data arrive, call OnBeforReceive() and
	// OnReceive to dispose the data.

	while (true)
	{
		FD_ZERO(&(pthis->m_fdSel)) ;
		FD_SET((unsigned)pthis->m_sockReceiver,
			&(pthis->m_fdSel)) ;
		
#ifdef _DEBUG

		// printf("waiting for incoming message.\n") ;

#endif // _DEBUG

		if (!select(FD_SETSIZE,&(pthis->m_fdSel),
			NULL,NULL,&(pthis->m_tvDelay)))
		{

#ifdef VXWORKS

			taskDelay(1) ;

#endif // VXWORKS

			continue ;
		}

		memset(szBuf,0,4096) ;
		memset(&(pthis->m_addrRecv),0,
			sizeof(sockaddr_in)) ;

		int iRet=recvfrom
			(pthis->m_sockReceiver,
			szBuf,4096,0,
			(SOCKADDR*)&(pthis->m_addrRecv),
			&iSockAddrSize
			) ;

		strcpy(szIpAddr,inet_ntoa
			(pthis->m_addrRecv.sin_addr)) ;

		if (iRet!=SOCKET_ERROR)
		{
			pthis->OnBeforeReceive
				(iRet,szBuf,&(pthis->m_addrRecv)) ;

			pthis->OnReceive
				(iRet,szBuf,&(pthis->m_addrRecv)) ;
		}
	}

}

void CUdpSocket::SetRemoteAddr(const char * targetip,int port)
{
	// Set port and remote host for sender

	m_addrRemote.sin_port=htons((short)port) ;
	m_addrRemote.sin_addr.s_addr=inet_addr(targetip) ;
}

const char * CUdpSocket::GetRemoteIp()
{
	static char szIp[16] ;

	strcpy(szIp,inet_ntoa(m_addrRemote.sin_addr)) ;

	return szIp ;
}

int CUdpSocket::GetRemotePort()
{
	return m_addrRemote.sin_port ;
}

int CUdpSocket::GetLocalPort()
{
	return m_addrRemote.sin_port ;
}

STATUS CUdpSocket::Send
	(int buflen,void * buf,sockaddr_in * addr)
{
	// The simple version for sendto(...)

	int nBytesSent ;

	if (!m_bReady) return NOT_INITIALIZED ;

	if (addr==NULL)
		addr = &m_addrRemote ;

	OnBeforeSend(buflen,buf) ;

	nBytesSent = sendto
		(m_sockSender,(char *)buf,buflen,0,
		(SOCKADDR*)addr,sizeof(SOCKADDR)
		) ;

	OnSendComplete(nBytesSent) ;

	return nBytesSent ;
}

STATUS CUdpSocket::Recv(int buflen,void * buf,
						int timeout,sockaddr_in * addr)
{
	int iSockAddrSize = sizeof(sockaddr_in) ;
	int iRet = NULL ;
	timeval tv ;

	// Receive data form network.

	if (timeout!=0)
	{

		FD_ZERO(&(m_fdSel)) ;
		FD_SET((unsigned)m_sockReceiver,&m_fdSel) ;

		tv.tv_sec = timeout/1000 ;
		tv.tv_usec = (timeout%1000)*1000 ;
		
#ifdef _DEBUG

		printf("waiting for incoming message.\n") ;

#endif // _DEBUG

		if (!select(FD_SETSIZE,&m_fdSel,
			NULL,NULL,&tv))
			return RECV_TIMEOUT ;

	}

	memset(buf,0,buflen) ;

	if (addr==NULL)
	{
		memset(&m_addrRecv,0,sizeof(sockaddr_in)) ;
		addr = &m_addrRecv ;
	}
	else
	{
		memset(addr,0,sizeof(sockaddr_in)) ;
	}

	iRet = recvfrom // Receive data gram
		(m_sockReceiver,
		(char *)buf,buflen,0,
		(SOCKADDR*)addr,&iSockAddrSize
		) ;

	return iRet ;

}

STATUS CUdpSocket::SetSenderBufferSize(int size)
{
	return setsockopt
		(m_sockSender,SOL_SOCKET,
		SO_SNDBUF,(char *)&size,sizeof(int)
		) ;
}

int CUdpSocket::GetSenderBufferSize()
{
	int size,n ;

	getsockopt
		(m_sockSender,SOL_SOCKET,
		SO_SNDBUF,(char *)&size,&n
		) ;

	return size ;
}

STATUS CUdpSocket::SetReceiverBufferSize(int size)
{
	return setsockopt
		(m_sockReceiver,SOL_SOCKET,
		SO_SNDBUF,(char *)&size,sizeof(int)
		) ;
}

int CUdpSocket::GetReceiverBufferSize()
{
	int size,n ;

	getsockopt
		(m_sockReceiver,SOL_SOCKET,
		SO_SNDBUF,(char *)&size,&n
		) ;

	return size ;
}

int CUdpSocket::GetSenderSocket()
{
	return m_sockSender ;
}

int CUdpSocket::GetReceiverSocket()
{
	return m_sockReceiver ;
}

CUdpSocket::~CUdpSocket()
{

#ifdef WIN32

#ifdef _DEBUG

	BOOL bThreadTerminated = FALSE ;

#endif // _DEBUG

	if (NULL!=m_sockSender&&
		INVALID_SOCKET!=m_sockSender)
		closesocket(m_sockSender) ;

	if (NULL!=m_sockReceiver&&
		INVALID_SOCKET!=m_sockReceiver)
		closesocket(m_sockReceiver) ;

	WSACleanup() ;

	// Terminate the recvsrv thread

#ifdef _DEBUG

	bThreadTerminated = TerminateThread
		((HANDLE)m_hThread,0) ;

	CloseHandle(m_hThread) ;

	if (bThreadTerminated)
		printf("thread 0x%x terminated.\n",m_hThread) ;

#else

	TerminateThread((HANDLE)m_hThread,0) ;

#endif // _DEBUG

#endif // _WIN32

#ifdef VXWORKS

#ifdef _DEBUG

	bool bTaskDeleted = false ;

#endif // _DEBUG

	if (NULL!=m_sockSender&&
		INVALID_SOCKET!=m_sockSender)
	{
		shutdown(m_sockSender,2) ;
		close(m_sockSender) ;
	}

	if (NULL!=m_sockReceiver&&
		INVALID_SOCKET!=m_sockReceiver)
	{
		shutdown(m_sockReceiver,2) ;
		close(m_sockReceiver) ;
	}

#ifdef _DEBUG

	bTaskDeleted = taskDelete(m_hTask) ;

	if (bTaskDeleted!=ERROR)
		printf("task 0x%x deleted.\n",m_hTask) ;

#else

	taskDelete(m_hTask) ;

#endif // _DEBUG

#endif // VXWORKS

}

// Our overridable functions.

// In the base class "CUdpSocket", the functions do nothing

void CUdpSocket::OnInitComplete(STATUS status)
{

#ifdef _DEBUG

	printf("OnInitComplete(%d)\n",status) ;

#endif

}

void CUdpSocket::OnBeforeSend(int buflen,void * buf)
{

#ifdef _DEBUG

	printf("OnBeforeSend(%d,...)\n",buflen) ;

#endif

}

void CUdpSocket::OnSendComplete(STATUS status)
{

#ifdef _DEBUG

	printf("OnSendComplete(%d)\n",status) ;

#endif

}

void CUdpSocket::OnBeforeReceive
	(int buflen,void * buf,sockaddr_in * addr)
{

#ifdef _DEBUG

	printf("OnBeforeReceive(%d,...)\n",buflen) ;

#endif

}

void CUdpSocket::OnReceive
	(int buflen,void * buf,sockaddr_in * addr)
{

#ifdef _DEBUG

	printf("OnReceive(%d,...)\n",buflen) ;

#endif

}

// End of the file

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久影院视频免费| 精品88久久久久88久久久| 日韩福利视频网| 日韩欧美一二三| 成人免费的视频| 中文字幕一区二区三区av| 欧美人妇做爰xxxⅹ性高电影 | 欧美高清激情brazzers| 国产在线一区观看| 日韩美女视频一区| 日韩久久精品一区| 成人app在线观看| 亚洲一区在线观看免费观看电影高清 | 激情综合色综合久久| 亚洲欧美综合另类在线卡通| 欧美亚洲国产bt| 国产91丝袜在线播放0| 天天综合网 天天综合色| 国产精品网站在线| 欧美一区二区女人| 91高清视频在线| 不卡视频在线看| 毛片av一区二区| 亚洲第一久久影院| 亚洲欧洲色图综合| 精品国产电影一区二区 | 北条麻妃一区二区三区| 日韩av电影免费观看高清完整版在线观看 | 亚洲精品免费一二三区| 国产片一区二区三区| 91精品国产综合久久精品app| 成人激情文学综合网| 蜜臀精品一区二区三区在线观看 | 久久国产精品99久久久久久老狼 | 欧美色综合网站| 成人aaaa免费全部观看| 九九在线精品视频| 亚洲va在线va天堂| 最新日韩av在线| 中文一区一区三区高中清不卡| 3d动漫精品啪啪| 欧美日韩中文字幕一区| 成人激情av网| 国产精品一品二品| 韩国欧美一区二区| 另类小说图片综合网| 免费看欧美女人艹b| 日韩国产欧美三级| 亚洲综合视频网| 亚洲情趣在线观看| 亚洲视频一区二区在线观看| 国产精品伦理一区二区| 中文字幕不卡在线观看| 2014亚洲片线观看视频免费| 日韩精品在线看片z| 日韩欧美一二三| 欧美精品黑人性xxxx| 欧美精品视频www在线观看| 欧美日韩一区高清| 在线欧美日韩国产| 欧美色网一区二区| 欧美调教femdomvk| 欧美二区乱c少妇| 777久久久精品| 欧美v日韩v国产v| 日韩欧美国产午夜精品| 久久久亚洲午夜电影| 国产午夜精品久久久久久久| 国产精品私人自拍| 亚洲欧美视频在线观看| 中文字幕亚洲电影| 伊人一区二区三区| 日韩国产精品久久久| 久久精品国产亚洲a| 国产精品自拍网站| 国产成人av一区二区三区在线观看| 国产69精品久久777的优势| 成人免费毛片a| 一本在线高清不卡dvd| 欧美三级乱人伦电影| 欧美日韩一区二区在线视频| 欧美一级欧美三级| 久久久久久久久久看片| 一区视频在线播放| 一区二区三区日韩欧美| 蜜臀久久99精品久久久画质超高清| 国内精品在线播放| 99视频有精品| 欧美一级在线视频| 久久久久久黄色| 一区二区国产视频| 蜜桃精品视频在线| www.欧美日韩| 欧美一区二区精美| 国产亚洲短视频| 亚洲午夜三级在线| 国产成人午夜99999| 在线观看网站黄不卡| 精品国产亚洲在线| 亚洲特级片在线| 久久成人免费网| 色视频一区二区| 亚洲精品在线免费观看视频| 亚洲精品国产一区二区精华液 | 日韩精品自拍偷拍| 亚洲激情校园春色| 不卡视频在线观看| 久久蜜桃av一区二区天堂 | 亚洲国产aⅴ天堂久久| 国产美女在线精品| 91精品国产麻豆国产自产在线| 中文字幕一区二区三| 国产福利91精品| 精品日本一线二线三线不卡| 午夜天堂影视香蕉久久| 一本久道中文字幕精品亚洲嫩| 欧美国产亚洲另类动漫| 国产一区二区三区黄视频| 欧美一级二级三级蜜桃| 午夜电影网一区| 欧美性大战久久久| 亚洲最快最全在线视频| 99re成人在线| 日韩一区在线看| 99免费精品视频| 综合久久久久久| 99久久国产免费看| 1000部国产精品成人观看| 99在线热播精品免费| 国产精品不卡在线| 99久久777色| 18欧美亚洲精品| 91免费国产在线观看| 国产精品女主播在线观看| 成人激情av网| 综合在线观看色| 在线免费亚洲电影| 亚洲国产欧美在线| 欧美精品aⅴ在线视频| 无吗不卡中文字幕| 91精品国产综合久久香蕉麻豆 | 国产一区二区调教| 久久蜜桃香蕉精品一区二区三区| 国产一区二区三区av电影| 国产欧美日韩综合精品一区二区| 国产成人日日夜夜| 国产精品乱子久久久久| 一本大道av伊人久久综合| 亚洲一区二区三区激情| 91精品国产综合久久福利| 久久精品国内一区二区三区| 国产亚洲精品bt天堂精选| jlzzjlzz欧美大全| 一区二区三区国产精华| 91精品国产高清一区二区三区| 美国十次综合导航| 国产欧美一区二区精品性| 色综合天天狠狠| 丝袜诱惑亚洲看片| 精品久久久久久综合日本欧美 | 日本韩国欧美一区二区三区| 亚洲福利视频三区| 欧美一级午夜免费电影| 国产白丝网站精品污在线入口| 亚洲色图第一区| 制服丝袜国产精品| 成人天堂资源www在线| 亚洲最大成人网4388xx| 日韩亚洲欧美在线| 成人黄色在线网站| 亚洲国产乱码最新视频| 久久天天做天天爱综合色| 99re这里只有精品6| 免费精品99久久国产综合精品| 中文字幕精品三区| 欧美男生操女生| 国产91丝袜在线播放0| 婷婷六月综合网| 国产精品免费观看视频| 欧美日韩一区二区三区在线看| 韩国欧美国产一区| 亚洲最新视频在线观看| 国产性做久久久久久| 欧美日韩一区三区| 国产**成人网毛片九色| 日韩中文字幕麻豆| 国产精品麻豆网站| 欧美不卡一二三| 色欧美88888久久久久久影院| 狠狠狠色丁香婷婷综合久久五月| 亚洲欧美另类小说| 久久综合久久鬼色中文字| 欧美在线制服丝袜| 国产mv日韩mv欧美| 日本亚洲一区二区| 一区二区在线观看视频在线观看| 久久无码av三级| 欧美一区二区日韩| 色琪琪一区二区三区亚洲区| 国产精品综合在线视频|