1、所需的头文件、库文件和DLL
目前使用最广泛的Windows Socket2.2版本,所需的一些文件如下(以安装了VC6为例说明其物理位置):
l 头文件winsock2.h,通常处于C:"Program Files"Microsoft Visual Studio"VC98"INCLUDE;查看该头文件可知其中又包含了windows.h和pshpack4.h头文件,因此在windows中的一些常用API都可以使用;
l 库文件Ws2_32.lib,通常处于C:"Program Files"Microsoft Visual Studio"VC98"Lib;
l DLL文件Ws2_32.dll,通常处于C:"WINDOWS"system32。
2、UDP收发程序
#include <winsock2.h>
#pragma comment(lib, "ws2_32")
int WebCamera::UDPinitializer(SOCKET *Socket,unsigned short Port)
{
int error;
SOCKADDR_IN addrSrv;
// SOCKADDR_IN AddrTo;
unsigned long flag=1;
int nRecvBuf=1024*1024*256;//设置为256M
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 2 );
if ( WSAStartup( wVersionRequested, &wsaData ) != 0 )
{
return 0;
}
if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup( );
return 0;
}
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(Port);
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
if(*Socket)
{
closesocket(*Socket);
*Socket=NULL;
}
*Socket=socket( AF_INET , SOCK_DGRAM , 0 );
error = bind(*Socket,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
if(SOCKET_ERROR == error)
return 0;
else
{
setsockopt(*Socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
// setsockopt(m_hSocketImage,SOL_SOCKET,SO_REUSEADDR,(const char*)&nRecvBuf,sizeof(int));
if (ioctlsocket(*Socket,FIONBIO,&flag)!=0)
{
closesocket(*Socket);
return 0;
}
}
return 1;
}
3、数据类型和相关函数说明
1)SOCKET类型
SOCKET是socket套接字类型,在WINSOCK2.H中有如下定义:
typedef unsigned int u_int;
typedef u_int SOCKET;
可知套接字实际上就是一个无符号整型,它将被Socket环境管理和使用。套接字将被创建、设置、用来发送和接收数据,最后会被关闭。