이것은 Windows 7의 C++입니다. 나는 일종의 초심자 인 멀티 캐스트 소켓 사용자이며,이 코드를 다른 사람으로부터 상속받습니다.Windows 7 멀티 캐스트 수신 중지 몇 분 후 수신
ADDR 225.1.1.2에서 멀티 캐스트 소켓을 만들거나 가입하는 여러 대의 컴퓨터가 있는데 왜 소켓이 연결되면 정기적으로 서로 "다양한"메시지를 보내면서 "채팅"합니다. 네트워크에서 하나의 컴퓨터 ("A"라고 함)를 시작하고 초당 한 번씩 "keepalive"메시지를 주기적으로 보내지 만 아무 것도 수신되지 않고 (다른 사람이 멀티 캐스트 주소에 연결되어 있지 않음) 앉아서 둡니다 약 3 분 동안 다른 컴퓨터 B를 시작하면 첫 번째 컴퓨터 A는 컴퓨터 B의 브로드 캐스트 메시지를 보지 못합니다! B는 패킷을 보내는 데 오류가 없으며 A는 아무 것도 수신하지 않습니다 (수신은 호출되지 않습니다). 무언가가 수신부를 종료하거나 어떻게 그러한 정보를 등록 할지를 알리는 방법을 알지 못합니다.
두 머신을 서로 가깝게 시작하면 각 머신은 다른 하나의 keepalive 패킷을 봅니다. 두 컴퓨터에서 모두 수신됩니다. 그러나 첫 번째 컴퓨터를 시작한 후 3 분이 지나면 두 번째 컴퓨터를 시작하면 첫 번째 컴퓨터의 수신 방법이 잠자기 상태가되거나 사라 졌거나 혼수 상태에 빠진 것 같습니다. 오류는 발생하지 않지만 일반 컴퓨터 B의 패킷을 볼 수 없습니다. (게다가, 디버거 출력에서 3 개의 쓰레드가 종료 된 것을 볼 수 있습니다.하지만 생성 된 쓰레드가 아니라 시스템 쓰레드입니다.)
다음hSock = WSASocket(
AF_INET,
SOCK_DGRAM,
0,
NULL,
0,
WSA_FLAG_MULTIPOINT_C_LEAF | WSA_FLAG_MULTIPOINT_D_LEAF | WSA_FLAG_OVERLAPPED);
setsockopt(hSock,SOL_SOCKET,SO_REUSEADDR,(char *) &bVal,sizeof(bVal));
srcIP.sin_family=AF_INET;
// Need to bind to local interface
srcIP.sin_addr.s_addr=inet_addr(("225.1.1.2"); // htonl(INADDR_ANY);
srcIP.sin_port=htons(5555);
bind(hSock,(struct sockaddr FAR *) &srcIP,sizeof(srcIP));
nIP_TTL=36;
setsockopt(hSock,IPPROTO_IP,IP_MULTICAST_TTL,(char *) &nIP_TTL,sizeof(int));
mreq.imr_multiaddr.s_addr=inet_addr("225.1.1.2");
mreq.imr_interface.s_addr=inet_addr("225.1.1.2");
setsockopt(hSock,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char *) &mreq,sizeof(mreq));
내가 인터넷에서 건너 온 한 내용은 다음과 같습니다 :
그러나 기계 B는 하나 가장 최근에, 기계 A. 여기에서 킵 얼라이브 패킷을 참조하는 일은 소켓 호출의 시작
- 수신 버퍼가 가득 찼을 수 있습니다. (컴퓨터 A는 멀티 캐스트를 사용하는 네트워크의 유일한 사람이기 때문에 그렇게 생각하지 않습니다.)
- 방화벽은 몇 분 후에 멀티 캐스트 수신을 해제로 설정할 수 있습니다. (나는 이것을 믿지 않는다)
- 비 활동 중 X 분 후에 WinSock 프로토콜이 멀티 캐스트를 수신 할 수있다. (나는 이것도 믿지 않는다)