18,356
社区成员
发帖
与我相关
我的任务
分享
bool prepareUDP()
{
int buffsize = 1024*1024;
unsigned long nFlag = 1;
m_sokVideoSocket = socket(AF_INET, SOCK_DGRAM, 0);
BOOL fReuse = true;
if (SOCKET_ERROR == setsockopt(m_sokVideoSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)&fReuse, sizeof(BOOL)))
{
closesocket(m_sokVideoSocket);
m_sokVideoSocket = INVALID_SOCKET;
}
if (SOCKET_ERROR == setsockopt(m_sokVideoSocket, SOL_SOCKET, SO_RCVBUF, (char*)&buffsize, sizeof(int)))
{
closesocket(m_sokVideoSocket);
m_sokVideoSocket = INVALID_SOCKET;
}
if (SOCKET_ERROR == ioctlsocket(m_sokVideoSocket, FIONBIO, &nFlag))
{
closesocket(m_sokVideoSocket);
m_sokVideoSocket = INVALID_SOCKET;
}
sockaddr_in stSokAddr = { 0 };
int nSokStLen = sizeof(sockaddr);
//stSokAddr.sin_addr.S_un.S_addr = inet_addr(localIP);
stSokAddr.sin_addr.S_un.S_addr = INADDR_ANY;
stSokAddr.sin_port = htons(port);
stSokAddr.sin_family = AF_INET;
if (SOCKET_ERROR == bind(m_sokVideoSocket, (sockaddr *)&stSokAddr, nSokStLen))
{
//TRACE("m_sokVideoData bind port %d \n ", port);
closesocket(m_sokVideoSocket);
m_sokVideoSocket = INVALID_SOCKET;
return false;
}
return true;
}
static int recvData(void* ptr)
{
int nDataLen = 0;
char* szDataBuf = new char[65536];
memset(szDataBuf, 0, 65536);
int nSokStLen = sizeof(sockaddr);
fd_set stSocketSet;
timeval stTimeOut;
stTimeOut.tv_sec = 3;
stTimeOut.tv_usec = 0;
while (player->m_continuRcv)
{
FD_ZERO(&stSocketSet);
if (m_sokVideoSocket != INVALID_SOCKET)
{
FD_SET(m_sokVideoSocket, &stSocketSet);
}
//if (select(0, &stSocketSet, NULL, NULL, &stTimeOut) > 0)
{
// if (FD_ISSET(m_sokVideoSocket, &stSocketSet))
{
//SOCKADDR_IN remoteAddr;
// int nAddrLen = sizeof(remoteAddr);
//nDataLen = recvfrom(m_sokVideoSocket, (char*)szDataBuf, 65536, 0, (SOCKADDR*)&remoteAddr, &nAddrLen); //BUF_SIZE
nDataLen = recv(m_sokVideoSocket, (char*)szDataBuf, 65536, 0);
if (nDataLen > 12)
{
//processUDPDate(szDataBuf, nDataLen);
}
printf("%d\n",nDataLen);
}
}
//else
{
std::this_thread::sleep_for(std::chrono::milliseconds(1));//milliseconds nanoseconds
}
}
return 0;
}
int main()
{
if(prepareUDP)
{
std::thread t(recvData,nullptr);
t.detach();
}
}