Platform Builder 5.0
注意需要将 ws2.lib链接进项目(右键点击项目名称,然后setting),否则WSAGetLastError()总是无法编译通过。
#include "stdafx.h"
#include <winsock2.h>
#include <ws2tcpip.h>
#define CUSTOM_PORT 3333
int _tmain(int argc, TCHAR *argv[], TCHAR *envp[])
{
WSADATA wsaData;
SOCKET s;
int m_errorCode;
SOCKADDR_IN m_localAddress;
SOCKADDR_IN m_remoteAddress;
s = INVALID_SOCKET;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
RETAILMSG(1, (_T("/r/n----- WSAStartup Failed -----")));
return 0;
}
//create a UDP socket
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(s == INVALID_SOCKET)
{
WSACleanup();
RETAILMSG(1, (_T("/r/n----- SOCKET() Failed:%d -----"), WSAGetLastError()));
return 0;
}
//binding
int localPort = CUSTOM_PORT;
memset(&m_localAddress, 0, sizeof(SOCKADDR_IN));
m_localAddress.sin_family = AF_INET;
m_localAddress.sin_port = htons(localPort);
m_localAddress.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(s, (SOCKADDR*) &m_localAddress, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
{
WSACleanup();
return 0;
}
int bytesRead, bufSize;
char inBuf[100];
bufSize = 100;
char outBuf[] = "hello world";
int SenderAddrSize = sizeof(m_remoteAddress);
do
{
bytesRead = recvfrom(s, inBuf, bufSize, 0, (SOCKADDR *)&(m_remoteAddress), &SenderAddrSize);
if(bytesRead == SOCKET_ERROR || bytesRead <= 0)
continue;
if (bytesRead > 0)
{
int sentBytes = 0;
int len = 18;
sentBytes = sendto(s, outBuf, len, 0, (SOCKADDR*) &m_remoteAddress, sizeof(m_remoteAddress));
}
} while(running);
WSACleanup();
return 1;
}