vc6.0 MFC 先用udp广播,又client建立连接,新手求大神解答
vc6.0 MFC 先用udp广播,再client建立连接,新手求大神解答
delphi 里面是
IdudpServer1.Broadcast('EASYNET',120); //广播
IdUDPServer1UDPRead 事件里:
IP := ABinding.PeerIP; //获取设备ip端口
port := ABinding.port;
按钮事件里:
ClientSocket1.Active:=False; //建立连接
ClientSocket1.Host:=IP;
ClientSocket1.Port:=120;
ClientSocket1.Active:=True;
用MFC怎么实现啊。。
我现在 MFC 里面 最基础的广播 都有点问题啊:
CString msg = "EASYNET";
SOCKADDR_IN addr;
int broad = 1;
SOCKET fd = socket(AF_INET,SOCK_DGRAM,0);
setsockopt(fd,SOL_SOCKET,SO_BROADCAST,(const char *)&broad,sizeof(broad));
addr.sin_addr.S_un.S_addr= INADDR_BROADCAST;
addr.sin_family = AF_INET;
addr.sin_port = htons(120);
sendto(fd,msg,strlen(msg)+1,0,(SOCKADDR *)&addr,sizeof(SOCKADDR));
------解决方案--------------------
------解决方案--------------------
比如我知道控制卡的固定端口是120,那addr.sin_port = htons(120); 而且szIpAddress就是我要填入的广播内容吗, 但是__CLEANUP__ 未定义,需要声明哪个?
------解决方案--------------------
udp广播成功以后,怎么获取到应答的 对象IP 就像 dlphi 里的
IdUDPServer1UDPRead 事件:
IP := ABinding.PeerIP; //获取设备ip端口
port := ABinding.port;
delphi 里面是
IdudpServer1.Broadcast('EASYNET',120); //广播
IdUDPServer1UDPRead 事件里:
IP := ABinding.PeerIP; //获取设备ip端口
port := ABinding.port;
按钮事件里:
ClientSocket1.Active:=False; //建立连接
ClientSocket1.Host:=IP;
ClientSocket1.Port:=120;
ClientSocket1.Active:=True;
用MFC怎么实现啊。。
我现在 MFC 里面 最基础的广播 都有点问题啊:
CString msg = "EASYNET";
SOCKADDR_IN addr;
int broad = 1;
SOCKET fd = socket(AF_INET,SOCK_DGRAM,0);
setsockopt(fd,SOL_SOCKET,SO_BROADCAST,(const char *)&broad,sizeof(broad));
addr.sin_addr.S_un.S_addr= INADDR_BROADCAST;
addr.sin_family = AF_INET;
addr.sin_port = htons(120);
sendto(fd,msg,strlen(msg)+1,0,(SOCKADDR *)&addr,sizeof(SOCKADDR));
------解决方案--------------------
SOCKADDR_IN addr = {0};
SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(INVALID_SOCKET == sock)
{
goto __CLEANUP__;
}
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = htonl(INADDR_BROADCAST);
addr.sin_port = htons(DEFAULT_BROADCAST_PORT);
BOOL bBroadcast = TRUE;
if(SOCKET_ERROR == setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char*)&bBroadcast, sizeof(bBroadcast)))
{
goto __CLEANUP__;
}
if(SOCKET_ERROR == sendto(sock, (char*)szIpAddress, sizeof(szIpAddress), 0, (LPSOCKADDR)&addr, sizeof(addr)))
{
}
------解决方案--------------------
比如我知道控制卡的固定端口是120,那addr.sin_port = htons(120); 而且szIpAddress就是我要填入的广播内容吗, 但是__CLEANUP__ 未定义,需要声明哪个?
------解决方案--------------------
udp广播成功以后,怎么获取到应答的 对象IP 就像 dlphi 里的
IdUDPServer1UDPRead 事件:
IP := ABinding.PeerIP; //获取设备ip端口
port := ABinding.port;