Makale numarası: 131978 - Son Gözden Geçirme: 22 Şubat 2007 Perşembe - Gözden geçirme: 3.3

WinSock kullanan WinNT/Win95 altında birden çok noktaya yayın alma/gönderme nasıl

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Nasıl bir ana bilgisayar alabilir, bir çok noktaya yayın grubunun üyesi haline gelir ve ve Windows NT Windows Sockets (WinSock) arabirimini kullanarak çok noktaya yayın paketlerini gönderebilir, bu makalede anlatılmaktadır.

Bu işlevsellik, Windows 95'in de kullanılabilir.

Daha fazla bilgi

IP çok noktaya yayın veri birimi gönderme

IP çok noktaya yayın, yalnızca <a1>Tür</a1> SOCK_DGRAM AF_INET yuva üzerinde şu anda desteklenmiyor.

Bir IP çok noktaya yayın veri birimi Gönder'i belirtmek için çok noktaya yayın adresi 224.0.0.0 ile 239.255.255.255 bir sendto(), hedef adres olarak çeşitli arayın.

Varsayılan olarak, IP çok noktaya yayın datagramları, bunları tek bir alt ağı dışında iletilmesini önler. 1 ' in bir yaşam süresi (TTL) gönderilir. Aşağıdaki kod, bu işlevselliği değiştirme gösterilmiştir:

  int ttl = 7 ; // Arbitrary TTL value.

  setsockopt(sock, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&ttl, sizeof(ttl))
				
Herhangi bir alt ağı üzerinde bir TTL 0 ile çok noktaya yayın datagramları aktarılır. Çok noktaya yayın datagramları için ilk atlama altağ iliştirilmiş bir veya daha fazla çok noktaya yayın yönlendiricileri varsa bir birden çok alt ağ için teslim edilmesi, daha büyük bir TTL DEĞERINE sahip.

Çok noktaya yayın yönlendirici ile hedef adresleri 224.0.0.0 224.0.0.255 bağımsız olarak kendi TTLs dahil arasındaki çok noktaya yayın datagramları iletin. Bu belirli bir adres aralığı, yönlendirme iletişim kuralları ve alt düzey topolojisi bulma veya bakım gibi diğer protokoller, ağ geçidi bulma ve grup üyeliği raporlama kullanılmak üzere ayrıldı. Ana bilgisayarı, birden çok noktaya yayın yeteneğindeki arabirimi olsa bile, her çok noktaya yayın iletimi bir tek bir ağ arabiriminden gönderilen. Belirli bir yuvadan izleyen aktarımlar için varsayılan geçersiz kılmak BIR yuva seçeneği kullanılabilir. Örneğin
  unsigned long addr = inet_addr("157.57.8.1");
  setsockopt(sock, IPPROTO_IP, IP_MULTICAST_IF,

            (char *)&addr, sizeof(addr))
				
olduğu "addr" istenen giden arabirimin yerel IP adresi. Adres INADDR_ANY varsayılan arabirim dönmek için kullanılabilir. Bu adres yuvanın bağlı olduğu bilgisayardan farklı olabileceğini unutmayın.

Bir çok noktaya yayın veri birimi (giden arabirimi), gönderen ana ait olduğu grubu için varsayılan olarak gönderilirse, datagram bir kopyasını yerel teslimat için geri IP katmanı tarafından döngüye. UNIX bazı sürümlerinde, bu davranışı (IP_MULTICAST_LOOP) devre dışı bırakmak kullanılabilir bir seçenek yoktur. Bu seçenek, Windows NT'DE desteklenmez. Bu davranışı devre dışı bırakmayı deneyin, çağrı WSAENOPROTOOPT (Hatalı iletişim kuralı seçeneği) hatası vererek başarısız olur.

Bir başlangıç TTL ile ana bilgisayar diğer arabirim, hedef grubuna ait ise 1 olarak farklı bir arabirimden, gönderen ana makineye, onu gönderilip gönderilmediğini, teslim [NULL]'den büyük gönderilen çok noktaya yayın veri birimi. Geridöngü denetim seçeneği gibi teslim etkisi vardır.

IP çok noktaya yayın veri birimi alma

Bir ana bilgisayar IP alabilmesi için önce çok noktaya yayın datagramları, bir veya daha çok IP üyesi haline gerekir çok noktaya yayın grubu. Aşağıdaki yuva kullanarak çok noktaya yayın grubuna katılmak için ana bilgisayar işlemi isteyebileceğini
   struct ip_mreq mreq;
				
"mreq" aşağıdaki yapıda olduğu:
   struct ip_mreq {


       struct in_addr imr_multiaddr;   /* multicast group to join */ 
       struct in_addr imr_interface;   /* interface to join on    */ 


   }
				
örnek:
        #define RECV_IP_ADDR   "225.6.7.8"  // arbitrary multicast address

        mreq.imr_multiaddr.s_addr = inet_addr(RECV_IP_ADDR);
        mreq.imr_interface.s_addr = INADDR_ANY;
        err = setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
                        (char*)&mreq, sizeof(mreq))
				
setsockopt() işlevi çağırmadan önce bir adresine bağlamak gerekli olduğunu unutmayın.

Her üyeliğidir tek bir arabirimle ilişkili ve aynı zamanda aynı grup birden fazla arabirimde katılmaya olanaklıdır. "Imr_interface" adresini çok noktaya yayın varsayılan arabirim veya belirli bir (çok noktaya yayın yetenekli) arabirimini seçmek için ana bilgisayarın yerel adreslerden birini seçmek için INADDR_ANY olmalıdır.

En yüksek üyeliklerini yalnızca bellek ve ağ kartı destekler sınırlıdır.

Aşağıdaki kod örneği, bir üyelik bırakılacağı kullanılabilir
   struct ip_mreq mreq;
   setsockopt(sock, IPPROTO_IP, IP_DROP_MEMBERSHIP,


             (char*)&mreq,sizeof(mreq))
				
üyeliği eklemek için "mreq" olarak ayn? de?erleri içerdiği yerlerde kullanılan. Yuva kapatıldıktan veya yuva tutan bir işlemi da öldürülüyor, bir yuva ile ilişkili üyelikleri de bırakılır. Ancak, birden fazla yuva belirli bir gruba bir üye isteyemedi ve son talebi bırakılır kadar ana bilgisayar grubunun bir üyesini kalır....

Bir yuva ile ilişkili üyeliklerini mutlaka hangi datagramları, bu yuva tarafından alındığı belirlemek değil. Herhangi bir yuvası datagramı), <a1>hedef</a1> grubundaki bir üye farklı istedi, gelen çok noktaya yayın paketlerini çekirdek IP katmanı tarafından kabul edilir; ancak, belirli bir yuva bir çok noktaya yayın veri teslimi hedef bağlantı noktası (veya iletişim kuralı türü, ham yuva üzerinde), yalnızca tek noktaya yayın datagramları gibi ile temel alır. Belirli bir bağlantı noktasına gönderilen çok noktaya yayın datagramları almak için <a0></a0>, belirtilmezse yerel adres (INADDR_ANY) çıkılıyor, yerel bağlantı noktasına bağlamak gereklidir.

Aşağıdaki kodun bind() çağrı önce varsa birden çok işlem aynı SOCK_DGRAM UDP bağlantı noktasına bağlayın:
   int one = 1;
   setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(one))
				
böyle bir durumda, paylaşılan bağlantı noktası için tüm yuva teslim için gelen her gelen çok noktaya yayın veya yayın UDP datagramı, bağlantı noktasına bağlı.

Yeni, çok noktaya yayın ile ilgili bir yuva seçenekleri için gereken tanımlamaları WINSOCK.H dosyasında bulunur. Tüm IP adresleri, ağ bayt sırası geçirilir.

Referanslar

Dosya DOC\MISC\MULTICAST.TXT Win32 SDK ile birlikte bulunur.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Win32 Software Development Kit (SDK) 3.5
  • Microsoft Win32 Software Development Kit (SDK) 3.51
  • Microsoft Windows 95
Anahtar Kelimeler: 
kbmt kbapi kbcode kbhowto kbnetwork kbwinsock KB131978 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:131978  (http://support.microsoft.com/kb/131978/en-us/ )