我的目的是由a机发送广播,b机收到后将自己的ip地址发送给a机,现在遇到的问题是a机收不到b机的返回信息,代码如下:a机:
SOCKET s;
sockaddr_in a,addrto;
WSADATA wsdata;
BOOL bsocket;
WSAStartup(0x0202,&wsdata);
char buf[256]; s=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
bsocket=TRUE; addrto.sin_family=AF_INET;
addrto.sin_addr.s_addr=INADDR_BROADCAST;
addrto.sin_port=htons(5050);
bool opt=true;
setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt,sizeof(opt));
bind(s,(sockaddr *)&a,sizeof(sockaddr_in));
int nlen=sizeof(addrto);
while(1)
{
strcpy(buf,"Jedi");
int ret=sendto(s,buf,256,0,(sockaddr*)&addrto,nlen);
if(ret==SOCKET_ERROR)
{
}
else
{
if(recvfrom(s,buf,256,0,(struct sockaddr*)&addrto,&nlen)!=SOCKET_ERROR)
{
char *pInfo = buf;
in_addr addr;
memcpy(&addr,pInfo,sizeof(in_addr));
pInfo += sizeof(in_addr);
int nPort = *(int*)pInfo;
char *pIp = inet_ntoa(addr);
MessageBox(pIp);
break;
}
}
}
WSACleanup();----------------------------------------------------------------------------
b机:
SOCKET s;
sockaddr_in from,a;
WSADATA wsdata;
BOOL optval;
WSAStartup(0x0202,&wsdata);
optval=TRUE;
char name[256];
PHOSTENT hostinfo;
int nPort = 1133;
if( gethostname ( name, sizeof(name)) == 0)
{
if((hostinfo = gethostbyname(name)) != NULL)
{
in_addr addr = *(struct in_addr *)*hostinfo->h_addr_list;
memcpy(name,(void*)&addr,sizeof(in_addr));
memcpy(name + sizeof(in_addr),&nPort,sizeof(int));
}
} a.sin_family=AF_INET;
a.sin_addr.s_addr=0;
a.sin_port=htons(5050);
from.sin_family=AF_INET;
from.sin_addr.s_addr=INADDR_BROADCAST;
from.sin_port=htons(5050);
int fromlength=sizeof(SOCKADDR);
s=socket(AF_INET,SOCK_DGRAM,0);
setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof(optval));
bind(s,(sockaddr *)&a,sizeof(sockaddr_in));
char buf[256];
int i = 0;
while(1)
{
if(recvfrom(s,buf,256,0,(struct sockaddr FAR *)&from,(int FAR *)&fromlength))
{
sendto(s,name,256,0,(struct sockaddr FAR *)&from,fromlength);
}
Sleep(2000);
i++;
if(i == 2)
break;
}
WSACleanup();哪位能帮我看看是哪里出了问题,在同一台机器上没问题,但是在两台机器上,b能收到广播,但是a收不到b的发送信息。
SOCKET s;
sockaddr_in a,addrto;
WSADATA wsdata;
BOOL bsocket;
WSAStartup(0x0202,&wsdata);
char buf[256]; s=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
bsocket=TRUE; addrto.sin_family=AF_INET;
addrto.sin_addr.s_addr=INADDR_BROADCAST;
addrto.sin_port=htons(5050);
bool opt=true;
setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt,sizeof(opt));
bind(s,(sockaddr *)&a,sizeof(sockaddr_in));
int nlen=sizeof(addrto);
while(1)
{
strcpy(buf,"Jedi");
int ret=sendto(s,buf,256,0,(sockaddr*)&addrto,nlen);
if(ret==SOCKET_ERROR)
{
}
else
{
if(recvfrom(s,buf,256,0,(struct sockaddr*)&addrto,&nlen)!=SOCKET_ERROR)
{
char *pInfo = buf;
in_addr addr;
memcpy(&addr,pInfo,sizeof(in_addr));
pInfo += sizeof(in_addr);
int nPort = *(int*)pInfo;
char *pIp = inet_ntoa(addr);
MessageBox(pIp);
break;
}
}
}
WSACleanup();----------------------------------------------------------------------------
b机:
SOCKET s;
sockaddr_in from,a;
WSADATA wsdata;
BOOL optval;
WSAStartup(0x0202,&wsdata);
optval=TRUE;
char name[256];
PHOSTENT hostinfo;
int nPort = 1133;
if( gethostname ( name, sizeof(name)) == 0)
{
if((hostinfo = gethostbyname(name)) != NULL)
{
in_addr addr = *(struct in_addr *)*hostinfo->h_addr_list;
memcpy(name,(void*)&addr,sizeof(in_addr));
memcpy(name + sizeof(in_addr),&nPort,sizeof(int));
}
} a.sin_family=AF_INET;
a.sin_addr.s_addr=0;
a.sin_port=htons(5050);
from.sin_family=AF_INET;
from.sin_addr.s_addr=INADDR_BROADCAST;
from.sin_port=htons(5050);
int fromlength=sizeof(SOCKADDR);
s=socket(AF_INET,SOCK_DGRAM,0);
setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof(optval));
bind(s,(sockaddr *)&a,sizeof(sockaddr_in));
char buf[256];
int i = 0;
while(1)
{
if(recvfrom(s,buf,256,0,(struct sockaddr FAR *)&from,(int FAR *)&fromlength))
{
sendto(s,name,256,0,(struct sockaddr FAR *)&from,fromlength);
}
Sleep(2000);
i++;
if(i == 2)
break;
}
WSACleanup();哪位能帮我看看是哪里出了问题,在同一台机器上没问题,但是在两台机器上,b能收到广播,但是a收不到b的发送信息。
解决方案 »
- CWebBrowser2为什么浏览google输入搜索的时候程序死了
- 有关HOOK说法 看对不对???
- 今天领到了工资,买了一本心仪已久的书,正好花了100元,特放分100庆祝!
- VC的困惑!!!!!!!!!!!
- 如何在客户端提取访问网站的Cookie?(???)
- 高手相助:vc ado如何实现存储过程?谢谢!!!
- API怎样获得对话框上单行型编辑框中的内容?
- 我的矢量绘图程序在win98环境下花屏,帮帮我啊!
- 请问把a.sys和a.exe和并成一个all.exe文件如何实现,里面内容更详细??
- 怎样在别的类中声名一个类模板
- 100急救 线程 刷新
- 【散分】系分45/45/45, 太高兴了。散分1000 -- 之四
我的解决方法是客户机自己取得自己的ip地址和端口,同时绑定这个端口,然后把ip地址和端口发给服务器,服务器根据这个地址和端口把信息发回来。gg/gl
但是按你说的方法确实是可以解决问题。原因还是不清楚……揭贴吧!