2010-02-09 20 views
7

Java'da, aynı programın çoklu örnekleri arasındaki iletişim için bir bağlantı noktası numarası almam gerekiyor. Şimdi, bazı sabit numaralar seçip onunla gidebilirim. Ancak, bağlantı noktası numarasını dinamik olarak seçmenin bir yolu olup olmadığını merak ediyorum, böylece kullanıcılarımı bağlantı noktası numarasını ayarlayarak rahatsız etmeme gerek yok.Dinamik bağlantı noktası numarası mı seçiliyorsunuz?

İşte bu gibi çalışır olduğum bir fikir var:

  • sabit başlangıç ​​noktası numarası A.
  • Programı 'Uygulamam' başladığında, başarılı olursa liman A.
  • kapmak için çalışır var Daha sonra 'MyApp' ilk örneğidir. Bitti.
  • Eğer başarısız olursa, A noktasındaki programın 'MyApp' örneğidir. Varsa, o örnekle iletişim kurun. Bitti. Değilse, A + 1 bağlantı noktasını tutmayı deneyin. Ve eğer bu portu kullanan başka bir program varsa ('MyApp' örneğini de değil), sonra A + 2, sonra A + 3, vb.

Bu strateji anlamlıdır mı? Veya bir port numarasını dinamik olarak seçmek için daha iyi bir yol var mı?

+1

Bunu yapmanıza gerek yok. Bir soket oluşturursanız, sistem sizin için otomatik olarak bir sonraki kullanılabilir port numarasını atar. Lütfen, kullandığınız soket API'sının belgelerini dikkatlice okuyun. Ayrıca, kullandığınız programlama dili/kitaplığı hakkında daha fazla etiket sağlayın. –

+0

@dma_k: Java'da, bunu başarmak için bağlantı noktası 0'a bağlamanız gerekir (karşı-sezgisel, biliyorum). Hiç bağlanmazsan, onu dinleyemezsin. : -P –

+0

Oldukça fazla tüm soket uygulaması hatırlıyorum bu "karşı-sezgisel" hilesi, dinamik olarak atanmış bir bağlantı noktası istemek ... burada çok özel bir şey. – jldupont

cevap

26

Bağlantı noktası 0'a bağlanırsanız, Java sistem tarafından oluşturulan bir bağlantı noktası kullanır. :-) Yani, istediğiniz bağlantı noktası zaten kullanılıyorsa, muhtemelen düşmesi en kolay yoldur.

ServerSocket s = new ServerSocket(0); 
int port = s.getLocalPort(); // returns the port the system selected 
+2

... ve örnekler birbirlerini nasıl bulacak? Sorunun konusu bu değil midir? – jldupont

3

Tersine gider ve uygulamanız için sabit bir yüksek bağlantı noktası seçerim. Gerekirse değiştirilebilmesi için bir yapılandırma değeri yapın. Bu, uygulama kullanıcılarının, bağlantı noktalarını açmak için ağ işlemleri istemeleri gerektiğinde sık sık yapılandırmayı kolaylaştıracaktır. IANA atanmış değerlerle geçici:

http://www.iana.org/assignments/port-numbers

Tarama portları birçok saldırı tespit sistemleri için kötü bir vatandaş haline uygulamanızı dönüşebilir.

1

Her örneğin hizmetlerinin tanıtımı için Bonjour/ZeroConf'u kullanabilir ve diğerlerini bulmak için bir örneği etkinleştirebilirsiniz. Bunu, bağlantı noktası ad alanınızı yönetmeye yardımcı olabilecek dizin hizmeti olarak düşünün.

Her örnek bu durumda dinamik olarak atanmış bir bağlantı noktası yakalayabilir. "0" portuna bağlanma talebi genellikle sistemi dinamik bir port atamasını ister.

İlgili konular