为什么我用raw socket不能对无线网卡进行发包的操作?

xhwu3721 2005-04-15 04:35:43
用raw socket做的一个发包程序,对无线网卡不起作用,但对普通的realtek 8139的网卡却可以,
不知为什么?
代码如下:

void CRemoteSimDlg::OnBnClickedBConnect()
{
UpdateData(TRUE);
sprintf(g_strIP,(LPCSTR)m_strIP);
g_nProtocol=m_nProtocol;
if (m_nLength>=16*1024)
m_nLength=16*1024;
if (m_nLength<=0)
m_nLength=1;
if (m_nTimer<0)
m_nTimer=1;
if (m_nTimer>10000)
m_nTimer=10000;
//sprintf(g_strIP1,(LPCSTR)m_strIP1);
static int bStart=0;
if (bStart==0)
{
int err;

m_s=socket(AF_INET,SOCK_RAW,IPPROTO_IP); //g_nProtocol);

if (m_s==INVALID_SOCKET)
::MessageBox(NULL,"Create Mulicast error!","Loopback",MB_OK);
//指定哪片网卡进行发送add by peterwu

UpdateData(TRUE);
hostent *pHostent;
unsigned long add=inet_addr(m_IPAddr);
pHostent=gethostbyaddr((char *)&add,sizeof(add),AF_INET);

//
struct sockaddr_in address;
address.sin_family=AF_INET;
memcpy(&address.sin_addr.s_addr,pHostent->h_addr_list[0],
pHostent->h_length);
address.sin_port=htons(1234);

err=bind(m_s,(struct sockaddr *)&address,sizeof(address));
if (err!=0)
::MessageBox(NULL,"Bind socker error!","Loopback",MB_OK);

ZeroMemory(&m_to,sizeof(m_to));

m_to.sin_family=AF_INET;
m_to.sin_addr.s_addr=inet_addr(g_strIP);

bStart=1;
bStartSend=TRUE;
::AfxBeginThread(_SendMsgUdpThread,this);
}
else
{
closesocket(m_s);
bStart=0;
KillTimer(101);
}
}
void CRemoteSimDlg::SendMyMessage()
{
static unsigned short sn=0;
static unsigned int timeStamp=0;
m_Message.dataLen=m_nLength+sizeof(struct RTPHEADER);
m_Message.UNION.rtpData.rtpHeader.sn=htons(sn);
m_Message.UNION.rtpData.rtpHeader.timestamp=htonl(timeStamp);
timeStamp++;
sn++;
int rtCode;
rtCode=sendto(m_s,(char *)(m_Message.UNION.data),m_Message.dataLen,
0,(struct sockaddr *)&m_to,sizeof(m_to));
if (rtCode==-1||rtCode!=m_Message.dataLen)
g_PacketLost++;
else
g_PacketReceived++;
}
UINT _SendMsgUdpThread(LPVOID lparam)
{
CRemoteSimDlg *pDlg=(CRemoteSimDlg *)lparam;
while(pDlg->bStartSend)
{
pDlg->SendMyMessage();
}
return 0;
}
//结构定义
#pragma pack(push,1)
struct MPEGIPHEADER{
unsigned char hdLen:4;
unsigned char ver:4;
unsigned char tos;
unsigned short totalLen;
unsigned short flag;
unsigned short offset:13;
unsigned short offsetflag:3;
unsigned char ttl;
unsigned char protocol;
unsigned short crc;
unsigned long srcAdr;
unsigned long dstAdr;
};
struct RTPHEADER
{
unsigned char cc:4;
unsigned char p:1;
unsigned char x:1;
unsigned char v:2;
unsigned char pt:7;
unsigned char m:1;
unsigned short sn;
unsigned int timestamp;
unsigned int ssrc;
};
struct RTPDATA{
struct RTPHEADER rtpHeader;
unsigned char data[MPEG_SEND_BUFFER_SIZE-sizeof(struct RTPHEADER)];
};
#pragma pack(pop)

typedef struct MPEGSENDMESSAGE
{
union{
struct RTPDATA rtpData;
unsigned char data[MPEG_SEND_BUFFER_SIZE];
}UNION;
int dataLen;
}MPEGSENDMESSAGE,*PMPEGSENDMESSAGE;
...全文
263 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhwu3721 2005-04-18
  • 打赏
  • 举报
回复
有人知道吗?
发表一点建议嘛.
xhwu3721 2005-04-15
  • 打赏
  • 举报
回复
好的,我明天发,还有大侠有什么建议吗?RawSocket是否是对所有的网卡都适用啊?
无线网卡用raw socket也一样能进行收发包的操作吧?
我的目的是要发一些可以进行IP头自行定义的封包.
有谁试过无线网卡的raw socket发包编程的吗?
xhzxlqt 2005-04-15
  • 打赏
  • 举报
回复
把你的工程发一个到xhzxlqt@163.com,我看看能不能帮上忙?

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧