如何自加IP,求一个清晰的代码
本帖最后由 my00129 于 2013-05-23 08:41:52 编辑 for(int i=0;i<255;i++)
{
addr.sin_addr.S_un.S_addr=inet_addr("192.168.8.i");
sendto(省略...);
}
我为了做到对所有IP地址的一个多播,但是这个方法的结果就是对本机进行了255次的发送。。。请问IP地址如何自加呢
[解决办法]
http://hi.baidu.com/iaskall/item/7a6f059111f92cbccd80e5e3
[解决办法]
可以这样做:
for(int i=0;i<255;i++)
{
CString strNo;
CString strIp = L"192.168.8.";
strNo.Format(L"%d",i);
strIp += strNo;
//此处再用将CString转化为const char* pstrIP
//省略.............
addr.sin_addr.S_un.S_addr=inet_addr(pstrIP);
sendto(省略...);
}
[解决办法]
这个地址改为255.255.255.255就会广播,但是结果就是只能发送到本机客户端,除非输入其他局域网明确的IP地址才能让对方收到。失去了广播效果!
很明显ERROR.给个源码你:
#define BUF_SZIE 64
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char* argv[])
{
WSADATA wsd;//WSADATA变量
SOCKET s;//套接字
SOCKADDR_IN servAddr;//服务器地址
charbuf[BUF_SZIE];//发送数据缓冲区
//初始化套结字动态库
if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
printf("WSAStartup failed!\n");
return 1;
}
BOOL fBroadcast = TRUE;
//创建套接字
s = socket(AF_INET, SOCK_DGRAM, 0);
if (s == INVALID_SOCKET)
{
printf("socket() failed; %d\n", WSAGetLastError());
WSACleanup();//释放套接字资源
return 1;
}
setsockopt( s , SOL_SOCKET,SO_BROADCAST,(CHAR *)&fBroadcast, sizeof(BOOL));
//赋值“MyUDP”
ZeroMemory(buf, BUF_SZIE);
strcpy(buf, "MyUDP");
//服务器地址
servAddr.sin_family =AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
servAddr.sin_port = htons((short)8800);
intnServAddlen = sizeof(servAddr);
//发送数据
if(sendto(s, buf, BUF_SZIE, 0, (SOCKADDR*)&servAddr, nServAddlen) == SOCKET_ERROR)
{
printf("recvfrom() failed: %d\n", WSAGetLastError());
closesocket(s);//关闭套接字
WSACleanup();//释放套接字资源
return 1;
}
closesocket(s);//关闭套接字
WSACleanup();//释放套接字资源
return 0;
}
以上源码可以广播。另外LZ只可以去看看<<精通Windows Sockets网络开发:基于Visual C++实现>>PDF,介绍详细,令人受精.