原始套接字绑定失败?
//创建RAW套接字并绑定7000端口m_socket1=socket(AF_INET,SOCK_RAW,IPPROTO_IP);if(INVALID_SOCKET==m...
//创建RAW套接字并绑定7000端口
m_socket1=socket(AF_INET,SOCK_RAW,IPPROTO_IP);
if(INVALID_SOCKET==m_socket)
{
AfxMessageBox("创建原始套接字失败!");
return FALSE;
}
char FAR name[128];
gethostname(name, sizeof(name));
struct hostent FAR * pHostent;
pHostent = gethostbyname(name);
SOCKADDR_IN sockaddr1;
sockaddr1.sin_family=AF_INET;
//sockaddr1.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
memcpy(&(sockaddr1.sin_addr),pHostent->h_addr,pHostent->h_length);
sockaddr1.sin_port=htons(7000);
int binderr1;
binderr1=bind(m_socket1,(LPSOCKADDR)&sockaddr1,sizeof(SOCKADDR));
//binderr1=bind(m_socket1,(SOCKADDR*)&sockaddr1,sizeof(SOCKADDR));
cuowu=GetLastError();
if(binderr1==SOCKET_ERROR)
{
AfxMessageBox("原始套接字绑定失败!");
return FALSE;
}
程序如上,编译连接均没有问题,但一运行就出现“原始套接字绑定失败!”,调试发现错误代码10038,说是在非套接字上进行操作,但我查了半天也没找到具体原因,谁能帮我看一看?问题在哪里?
我这只是贴出了一部分,初始化前面都已经完成了,而且前面我还创建并绑定了一个UDP端口,该端口调试运行都正常,就是新增了上述代码后,再运行,这个raw端口就绑定不了 展开
m_socket1=socket(AF_INET,SOCK_RAW,IPPROTO_IP);
if(INVALID_SOCKET==m_socket)
{
AfxMessageBox("创建原始套接字失败!");
return FALSE;
}
char FAR name[128];
gethostname(name, sizeof(name));
struct hostent FAR * pHostent;
pHostent = gethostbyname(name);
SOCKADDR_IN sockaddr1;
sockaddr1.sin_family=AF_INET;
//sockaddr1.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
memcpy(&(sockaddr1.sin_addr),pHostent->h_addr,pHostent->h_length);
sockaddr1.sin_port=htons(7000);
int binderr1;
binderr1=bind(m_socket1,(LPSOCKADDR)&sockaddr1,sizeof(SOCKADDR));
//binderr1=bind(m_socket1,(SOCKADDR*)&sockaddr1,sizeof(SOCKADDR));
cuowu=GetLastError();
if(binderr1==SOCKET_ERROR)
{
AfxMessageBox("原始套接字绑定失败!");
return FALSE;
}
程序如上,编译连接均没有问题,但一运行就出现“原始套接字绑定失败!”,调试发现错误代码10038,说是在非套接字上进行操作,但我查了半天也没找到具体原因,谁能帮我看一看?问题在哪里?
我这只是贴出了一部分,初始化前面都已经完成了,而且前面我还创建并绑定了一个UDP端口,该端口调试运行都正常,就是新增了上述代码后,再运行,这个raw端口就绑定不了 展开
4个回答
展开全部
在InitInstance()中添加源代码:
BOOL C(名字)App::InitInstance()//初始化实例
{
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);//套接字初始化失败
return FALSE;
}
#include "stdafx.h" 中添加#include <Afxsock.h>
BOOL C(名字)App::InitInstance()//初始化实例
{
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);//套接字初始化失败
return FALSE;
}
#include "stdafx.h" 中添加#include <Afxsock.h>
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参考答案: 狼亦黠矣,而顷刻两毙,禽兽之变诈几何哉?止增笑耳。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先用WSAStartup初始化套接字,好像是这个函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
调用WSAGetLastError看看具体的原因
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询