【发布时间】:2010-12-14 07:26:29
【问题描述】:
当我尝试在 win XP 中将某些内容多播到 IP 范围时,它工作正常,但是当我在 Win VIsta 上运行相同的应用程序时,我无法进行多播。我需要为 Win Vitsa 配置或添加发布者信息吗?
编辑:
struct sockaddr_in staddr;
memset(&staddr, 0, sizeof(struct sockaddr_in));
staddr.sin_family = AF_INET;
staddr.sin_port = htons(SSDP_PORT); // Use the first free port
staddr.sin_addr.s_addr=inet_addr(SSDP_MULTICAST_ADDRESS);
int socklen = sizeof(struct sockaddr_in);
编辑 2
Socket Creation
int ibindstatus =0 ;
try
{
//Initailize the WinSock
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
struct in_addr iaddr;
struct sockaddr_in staddr;
// set content of struct saddr and imreq to zero
memset(&staddr, 0, sizeof(struct sockaddr_in));
memset(&iaddr, 0, sizeof(struct in_addr));
// open a UDP socket
m_iSocket = socket(AF_INET, SOCK_DGRAM, 0);
if ( m_iSocket < 0 )
{
return SOCKET_NOT_AVAILABLE;
}
staddr.sin_family = AF_INET;
staddr.sin_port = htons(SSDP_PORT); // Use the first free port
staddr.sin_addr.s_addr = htonl(INADDR_ANY); // bind socket to any interface
ibindstatus = bind(m_iSocket, (struct sockaddr *)&staddr, sizeof(struct sockaddr_in));
if ( ibindstatus < 0 )
{
return SOCKET_BIND_ERROR;
}
//send the buffer
int iSendStatus = sendto(m_iSocket, cSendData, lSendDataLen, 0,
(struct sockaddr *)&staddr, socklen);
if(iSendStatus< 0)
{
return SEND_ERROR;
}
【问题讨论】:
-
你能发布一些代码吗?
-
先检查 Wireshark,也许你的机器通过错误的适配器发送。
-
如何创建套接字?
-
您检查过防火墙设置吗?尝试将其关闭以进行测试,看看它是否有效,如果有效 - 您必须重新配置防火墙。
-
@Tomek,是的,防火墙是关键,现在多播工作正常,有什么方法可以将我的应用程序添加到受信任列表中,这样用户就不必费心调整防火墙设置
标签: c++ windows mfc windows-vista