18,356
社区成员
发帖
与我相关
我的任务
分享
WSADATA wsData;/* 启动2.2版本的Socket,并将Socket版本信息保存到wsData中 */
WSAStartup(MAKEWORD(2,2),&wsData);//2.2
m_socket = socket(AF_INET,SOCK_RAW,IPPROTO_IP);//IPPROTO_IP
int timeout = 1000; //超时1秒
//设置接收数据的超时时间
if (SOCKET_ERROR==setsockopt(m_socket,SOL_SOCKET,SO_RCVTIMEO,(const char*)&timeout,sizeof(timeout)))
{
AfxMessageBox("接收超时");
return FALSE;
}
// BOOL flag=TRUE;/* 设置IP头操作选项 */
// setsockopt(m_socket,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));
char hostName[128];/* 获取本地主机名 */
// CString hostName;
memset(hostName,0,128);
hostent * pHostIP;/* 根据主机名获取主机信息 */
pHostIP=gethostbyname(hostName);
/* 封装IP地址信息 */
sockaddr_in addr_in;
addr_in.sin_addr=*(in_addr*)pHostIP->h_addr_list[0];
addr_in.sin_family=AF_INET;
addr_in.sin_port=htons(6000);
if (SOCKET_ERROR==bind(m_socket,(SOCKADDR*)&addr_in,sizeof(addr_in)))
{
AfxMessageBox("绑定失败!");
return FALSE;
}
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
DWORD dwBufferLen[10];
DWORD dwBufferInLen=1;
DWORD dwBytesReturned=0;
if (INVALID_SOCKET==WSAIoctl(m_socket,SIO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),
&dwBytesReturned,NULL,NULL))
{
CString str;
str.Format("%d",WSAGetLastError());//WSAEOPNOTSUPP 指定的ioctl命令无法实现
AfxMessageBox(str);
AfxMessageBox("设置缓冲区错误!");
closesocket(m_socket);
return FALSE;
}
return TRUE;