win7下sendto(),居然来个没有权限,高人指点!
有一段代码,在XP下没问题,在win7下问题就来了:
调用sendto()发消息的时候,操作返回结果值为
Error 10013:以一种访问权限不允许的方式做了一个访问套接字的尝试。
有人说用过管理员权限运行可以解决,但测试了下不行,不过行也没用,没有人运行个简单的程序要求人家右键选择方式.
还有就是bind()前设置一下属性:
BOOL bBroadcast=TRUE;
setsockopt(m_Socket,SOL_SOCKET,SO_BROADCAST,(const char *)&bBroadcast,sizeof(BOOL)); //设置广播权限
这个是可以通过并发送出去,但是服务端返回发给我,我检测IP源(服务端返回信息)的IP是255.255.255.255,估计是通过广播方式过来的(这个我也不太懂),
我的程序恰好有过滤来源IP的特性(只接收来自我发往的服务器Ip的信息),而且有不同的ip分流的处理,来了个255.255.255.255,就不知道仍给谁,也不允许
它这样.(这个是client和server都是局域网)
请问高手们,有没有办法将这个恶心的win7这个情况解决,希望高手们伸出援助之手,呵呵...感谢万分!!!!!!
相关代码:
m_Socket=socket(AF_INET,SOCK_DGRAM,0); //创建UDP套接字 //这2行解决 Error:10013 BOOL bBroadcast=TRUE; setsockopt(m_Socket,SOL_SOCKET,SO_BROADCAST,(const char *)&bBroadcast,sizeof(BOOL)); //设置广播权限 if (m_Socket == INVALID_SOCKET) { ATLTRACE("Tracker-Net Client Creating UDP socket Error:%d \n", WSAGetLastError()); return PRT_NET; } sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; // 绑定所有本机IP addr.sin_addr.s_addr = INADDR_ANY; //也ok bind(m_Socket, (sockaddr*)&addr, sizeof(addr)); //sendto()时有10013错误 sendto(.....);