请教一winsock问题,也许你认为很简单。 don't use 广播use UDP or TCP 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是UDP,因不知服务程序的IP,只好用广播来查询,即sendto() 以下代码为什么广播消息不能到达局域网?#define g_lBordCastPortRc 1680BOOL g_BCTSendTo(LPVOID lpData,int nSize) { // TODO: Add your command handler code here SOCKET s=INVALID_SOCKET; s=::socket(AF_INET,SOCK_DGRAM,0); if(s==INVALID_SOCKET) { AfxMessageBox("建立广播SOCKET 失败!"); return FALSE; } BOOL boptval=TRUE; if(setsockopt (s,SOL_SOCKET,SO_BROADCAST, (char *)&boptval,sizeof(boptval))) { AfxMessageBox("setsockopt error "); ::closesocket(s); return FALSE; } struct sockaddr_in ds;//服务器主机地址 ds.sin_family=AF_INET; ds.sin_port=::htons(u_short(g_lBordCastPortRc)); ds.sin_addr.S_un.S_addr=INADDR_BROADCAST; FD_SET fd = {1, s}; TIMEVAL tv = {0, 200};//200毫秒钟延迟 //设置发送超时 if(SOCKET_ERROR ==::select(0, NULL, &fd, NULL, &tv)) { ::closesocket(s); return FALSE; } int ret; ret=sendto(s,(const char *)lpData,nSize,0,(SOCKADDR *)&ds,sizeof(ds)); if(ret==SOCKET_ERROR) { AfxMessageBox("sendto err"); ::closesocket(s); return FALSE; } ::closesocket(s); return TRUE;} --------------以上代码在本地局域网是完全正确的,但远程拨号上网广播信息就不能到达局域网,因此我的广播找服务软件就不行了,请问各位大虾,这是为什么?首先申明这不是黑客程序。我的目的是先广播找到服务程序后再用连接的TCP/IP通信。(因先不知服务程序的IP)-------------------- g_BCTSendTo()发送是成功了的,它返回TRUE,但信息的却没到达远程局域网,???广播不能通过网关吗???广播不能通过网关吗??? VS2010 DockablePane 每次打开都自动隐藏 为什么我的bitmap超过256色在vc的资源中就无法显示?如何让其显示呢? 一行太长,想分行写用什么符号连接,,VC中.../ OR \ 在listctrl中如何把一列的HEAD设为居中,而下面的文本内容设为右对齐 请教:类似WORD2000中文件对话框如何实现? 如何用VC作精确定时(毫秒)? 大家好,有关类型转换的问题 请问,这样的虚线该怎么画? 如何成为vc高手。 如何捕获某个单文档应用视口的消息 GetDIBits怎么用 急求:那儿有mp3编码器的源代码?(包括完整的格式说明)
即sendto()
以下代码为什么广播消息不能到达局域网?#define g_lBordCastPortRc 1680BOOL g_BCTSendTo(LPVOID lpData,int nSize)
{
// TODO: Add your command handler code here
SOCKET s=INVALID_SOCKET;
s=::socket(AF_INET,SOCK_DGRAM,0);
if(s==INVALID_SOCKET)
{
AfxMessageBox("建立广播SOCKET 失败!");
return FALSE;
} BOOL boptval=TRUE;
if(setsockopt (s,SOL_SOCKET,SO_BROADCAST, (char *)&boptval,sizeof(boptval)))
{
AfxMessageBox("setsockopt error ");
::closesocket(s);
return FALSE;
}
struct sockaddr_in ds;//服务器主机地址
ds.sin_family=AF_INET;
ds.sin_port=::htons(u_short(g_lBordCastPortRc));
ds.sin_addr.S_un.S_addr=INADDR_BROADCAST; FD_SET fd = {1, s};
TIMEVAL tv = {0, 200};//200毫秒钟延迟 //设置发送超时
if(SOCKET_ERROR ==::select(0, NULL, &fd, NULL, &tv))
{
::closesocket(s);
return FALSE;
} int ret;
ret=sendto(s,(const char *)lpData,nSize,0,(SOCKADDR *)&ds,sizeof(ds));
if(ret==SOCKET_ERROR)
{
AfxMessageBox("sendto err");
::closesocket(s);
return FALSE;
}
::closesocket(s);
return TRUE;
}
以上代码在本地局域网是完全正确的,但远程拨号上网广播信息就不能到达局域网,因此我的广播找服务软件就不行了,请问各位大虾,这是为什么?
首先申明这不是黑客程序。
我的目的是先广播找到服务程序后再用连接的TCP/IP通信。(因先不知服务程序的IP)
--------------------
广播不能通过网关吗???
广播不能通过网关吗???