SORU
28 Ocak 2009, ÇARŞAMBA


Nasıl yuva API kabul etmez() fonksiyonu?

Soket arayüzü de-facto standart TCP/IP ve UDP/IP iletişim (bildiğimiz gibi, ağ kodu). Ancak, onun temel işlevleri, accept() biraz büyülü.

Yarı resmi bir tanımı ödünç:

() kabul sunucu tarafında kullanılır. Alınan gelen bir girişimi kabul eder yeni bir TCP bağlantısı oluşturmak için istemci ve oluşturur uzak yeni bir yuva, yuva ile ilgili bu bağlantı bir çift Adres.

Başka bir deyişle, accept döndüren üzerinden sunucuya yeni bağlanan istemci ile iletişim kurabilir, yeni bir yuva. Eski Soket üzerinde accept denilen (açık), aynı bağlantı noktasında, yeni bağlantılar için dinleme kalır.

Nasıl accept çalışır? Nasıl uygulanıyor? Bu konu üzerinde bayağı bir karışıklık var. Birçok kişi kabul yeni bir port açar ve içinden müşteri ile iletişim kurmak iddia ediyor. Ama bu tabii ki yeni bir port açılır olarak doğru değil. Aslında farklı müşterileri ile aynı bağlantı noktası, ama nasıl iletişim yoluyla olabilir? Birden çok iş parçacığı aynı bağlantı noktası recv çağrı ne zaman, ne kadar veri nereye biliyor mu?

Sanırım, bir şey boyunca çizgiler müşterinin adresi olmak ile ilgili bir soket tanımlayıcısı, ve her veri geliyor recv yönlendirilmiş doğru yuva, ama emin değilim.

İç işleyişini bu mekanizmanın ayrıntılı bir açıklama almak için harika olurdu.

CEVAP
28 Ocak 2009, ÇARŞAMBA


Bir soket Sunucu IP tespit ettiğini düşünmek karışıklık yatıyor : Sunucu bağlantı Noktası. Aslında, yuva benzersiz bir bilgi dörtlüsü tarafından belirlenir:

Client IP : Client Port Server IP : Server Port

Yani Sunucu IP ve Sunucu bağlantı Noktası kabul edilen tüm bağlantılar sabit iken, istemci tarafı bilgi her şeyin nereye gittiğini takip etmek için izin verir.

Örnek şeyleri açıklığa kavuşturmak için:

192.168.1.1:80 ve iki müşteri, 10.0.0.1 ve 10.0.0.2 bir server var diyelim.

10.0.0.1 sunucu için yerel port 1234 ve bağlanır bir bağlantı açar. Şimdi sunucu aşağıdaki gibi bir soket tespit etti

10.0.0.1:1234 - 192.168.1.1:80

Şimdi 10.0.0.2 açılır sunucu Yerel bağlantı noktası 5678 ve bağlanır bir bağlantı. Şimdi sunucu aşağıdaki gibi iki yuva tespit etti

10.0.0.1:1234 - 192.168.1.1:80
10.0.0.2:5678 - 192.168.1.1:80

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AlaskanGrizzly

    AlaskanGrizz

    30 EKİM 2009
  • Cole Rolland

    Cole Rolland

    23 Kasım 2008
  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012