WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return FALSE;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup();
return FALSE;
}
m_socket = WSASocket(AF_INET, SOCK_DGRAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
if (INVALID_SOCKET == m_socket)
{
AfxMessageBox("创建套接字失败!");
return FALSE;
}
SOCKADDR_IN addrSock;
addrSock.sin_family = AF_INET;
addrSock.sin_port = htons(8900);
addrSock.sin_addr.S_un.S_addr = inet_addr("192.168.1.59");//上位机ip=192.168.1.59,
//下位机IP=192.168.1.11
if (SOCKET_ERROR == bind(m_socket, (SOCKADDR*)&addrSock, sizeof(SOCKADDR)))
{
AfxMessageBox("绑定失败!");
return FALSE;
}
int timeout = 100*1;
if (SOCKET_ERROR == setsockopt(m_socket,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout)))
{
TRACE("set sock opt fail.");
}
timeout = 100*1;
if (SOCKET_ERROR == setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout)))
{
TRACE("set sock opt fail.");
}
if (SOCKET_ERROR == WSASendTo( m_socket, &wsabuf, 1, &dwSend, 0,
(SOCKADDR*)&addrTo, sizeof(SOCKADDR), NULL, NULL))
{
delete []wsabuf.buf;
return FALSE;
}
DWORD dwRead;
DWORD dwFlag = 0;
SOCKADDR_IN addrFrom;
int len = sizeof(SOCKADDR);
WSABUF wsabuf;
wsabuf.buf = new char[1060];
wsabuf.len = 1060; //每帧实际长度
memset(&g_waveBuf, 0, sizeof(WAVELENGTH_SOCKET));
memset(&g_specBuf, 0, sizeof(SPCETRUEM_SOCKET));
if (SOCKET_ERROR == WSARecvFrom(m_socket, &wsabuf, 1, &dwRead, &dwFlag,
(SOCKADDR*)&addrFrom, &len, NULL, NULL))
{
delete []wsabuf.buf;
return 0;
}