WSASendTo的回调函数问题

ygh2008123 ygh2008123 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
使用的是UDP组播,overlap方式发送,调用了WSASendTo后错误代码是WSA_IO_PENDING,本机上接收端也能收到发出去的数据,但发送端就是没进入回调函数,不知为何,麻烦各位帮忙看看

socket 设置如下:
m_hSocket = WSASocket (
AF_INET,
SOCK_DGRAM,
0,
NULL,
0,
WSA_FLAG_MULTIPOINT_C_LEAF | WSA_FLAG_MULTIPOINT_D_LEAF | WSA_FLAG_OVERLAPPED) ;

if (m_hSocket == INVALID_SOCKET) {
goto JoinFail ;
}

t = TRUE ;
i = setsockopt (
m_hSocket,
SOL_SOCKET,
SO_REUSEADDR,
(char *) & t,
sizeof t
) ;
if (i == SOCKET_ERROR) {
goto JoinFail ;
}

ZeroMemory (& saddr, sizeof saddr) ;
saddr.sin_family = AF_INET ;
saddr.sin_port = usPort ; // want data on this UDP port
saddr.sin_addr.S_un.S_addr = INADDR_ANY ; // don't care about NIC we're bound to

i = bind (
m_hSocket,
(LPSOCKADDR) & saddr,
sizeof saddr
) ;
if (i == SOCKET_ERROR) {
goto JoinFail ;
}

i = setsockopt (
m_hSocket,
IPPROTO_IP,
IP_MULTICAST_TTL,
(char *) & ulTTL,
sizeof ulTTL
) ;
if (i == SOCKET_ERROR) {
goto JoinFail ;
}

i = setsockopt (
m_hSocket,
IPPROTO_IP,
IP_MULTICAST_IF,
(char *) & ulNIC,
sizeof ulNIC
) ;
if (i == SOCKET_ERROR) {
goto JoinFail ;
}
-----------------------------------------------
WSASendTo的调用如下:
LPWSAOVERLAPPED pOverlap = new WSAOVERLAPPED;
pOverlap->Internal = 0;
pOverlap->InternalHigh = 0;
pOverlap->OffsetHigh = 0;
pOverlap->Offset = 0;
pOverlap->hEvent = (HANDLE)pParam; //回调函数使用该参数

DWORD sendbytes;
i= WSASendTo(m_hSocket,pParam->wsabuf,2,&sendbytes,0,(LPSOCKADDR) & m_saddrDest,sizeof m_saddrDest,pOverlap,SendComplete);
if (i != 0) {
dw = GetLastError () ;
if (dw != WSA_IO_PENDING)
{
return HRESULT_FROM_WIN32 (dw) ;
}
}
---------------------------------------------------------------
void CALLBACK SendComplete(
IN DWORD dwError,
IN DWORD cbTransferred,
IN LPWSAOVERLAPPED lpOverlapped,
IN DWORD dwFlags);
...全文

相关推荐

css.rar_WSASend_WSASendTo与Send_WSASendto_recvfrom_wsasend pudn

主要有调整的处理接口TCP组的有 send WSASend UDP组的是 sendto recvfrom WSASendto WSARecvfrom 下面的这四个发出封包接口参数二,封包地址,数据类型为整数型,1.8版模块需要选中参考项,原1.5版无需选参考 send WSASend sendto WSASendto 修改了参数二为参考后,当需要修改封包时,直接把新封包的内存地址赋值为该参数即可,居体操作代码见 mydll.e 只所以这么改是为了避免有时拦到的封包长度短,而要修改进去的封包长度超过了他的可写内存字节数时会产生的内存非法操作 UDP这组的四个接口的参数四,网络地址,数据类型在1.8版模块里需要改为文本型,原1.5版的是整数型 sendto recvfrom WSASendto WSARecvfrom 对于这四个接口的参数四改为文本型后如何操作,可以见1.8版的 取TCP重定向演示程序里的代码。 因为修改这个网络地址的参数为文本型,所以可以直接以文本型读取或赋值修改进去。

alvarocfc

封包助手V0.6

封包助手是一个能拦截网络应用程序数据包的纯绿色软件(无插件无病毒,不需安装),包括Send,Recv,WSASend,WSARecv,SendTo,RecvFrom,WSASendTo,WSARecvFrom。 封包助手还可以拦截Connect,WSAConnect和Accept,WSAAccept函数,使您能够知道您的网络程序何去何从。封包助手还支持算法接口,您可以自己编写算法(压缩包内有例程源代码),封包助手就可以加载,使您分析网络数据更加方便

yjb0725

ICMP扫描程序。.pdf

ICMP扫描程序。.pdf

屈子1

winsock收发结构体

花了一天时间终于搞定,共享之。希望能够带来一些帮助

麦芽糖的小男孩

UDP程序设计.ppt

UDP程序设计.ppt

超级源码阿
评论 3
收藏 已收藏
分享
返回顶部
ygh2008123
网络编程 18,356 成员 64,161 内容