Ağ programlama ve soket programlama arasındaki fark


16

"Soket programlama" hakkında "ağ programlama" ile karşılaştırıldığında büyük farklar var mı?

"Ağ programlama" ile ilgili "soket programlama" ile ilgili olmayan konular var mı?

Yanıtlar:


26

Soket programlama (en azından terim normal olarak kullanıldığında) belirli bir ağ API'sine programlama yapmaktır. Yuvalar IP tabanlı protokolleri (öncelikle TCP ve UDP) destekler 1 .

Ağ programlama çeşitli diğer API'ler kullanılarak yapılabilir. Windows, WNet * ve Net * işlevleri gibi protokolden bağımsız bir dizi API'ye sahiptir. Windows'un eski sürümlerinde NetBIOS / NetBEUI (NetBIOS Son Kullanıcı Arabirimi) ve en çok desteklenen (ve muhtemelen hala) IPX / SPX (eski bir Netware protokolü) kullanıldı.

Bununla birlikte, mevcut ağ programlarının çoğu ya doğrudan soketler kullanılarak ya da soketlerin üstündeki diğer çeşitli katmanlar kullanılarak yapılır (örneğin, normalde soketler üzerinden TCP ile uygulanan HTTP üzerinde oldukça fazla şey yapılır). TCP / IP ve UDP / IP (ve bir dizi diğer IP tabanlı protokol) öncelikle soket arabirimi aracılığıyla yapılır. Teoride, diğer programlama arayüzleri kullanılabilir, ancak pratikte soketler yeterli görünmektedir, bu yüzden değiştirilmesiyle ilgilenmemektedir. Ancak, Windows yuvalarının (WinSock) az çok Windows için benzersiz olan birkaç uzantıya sahip olduğunu belirtmeliyim. Bu uzantıları kullanan kod gerçekten "yuva" kodu olarak nitelenip nitelenmediğini bazı argümanlara açık olduğunu varsayalım - aynı kavramlara dayalı uzantılar, ancak bunları kullanan kod değil ' t Normalde diğer sistemlere taşınabilir. "Yuva" olarak nitelenip nitelenmeyeceğini tahmin etmek, öncelikle yuvaları daha çok bir kavram olarak mı yoksa çok özel bir işlevler, parametreler vb. Olarak mı düşündüğünüze bağlıdır.

Düzenle (yoruma yanıt olarak):

“Soketleri bilmek” in TCP ve UDP hakkında “her şeyi” bilmek anlamına gelip gelmediğini söylemek biraz zor. Küçük bir şey düşünelim: soketler için tipik bir demo programı bir istemci / sunucu sohbet programı oluşturmaktır. İstemci sunucuya bağlanır ve bir istemcideki kullanıcı bir şey yazdığında, aynı sunucuya bağlı olan diğer istemcilere yönlendirilir. Her istemci sunucudan gelenleri görüntüler ve kullanıcının diğer istemcilere gönderilecek iletileri yazmasına izin verir.

Aynı zamanda, AIM, Windows Messenger, iChat, vb. Gibi "gerçek" bir sohbet programının neler içerdiğini düşünün. Yalnızca metin değil, ses, video, dosya aktarımları, gruplar, listeler, vb. İşlemek için, tipik bir program muhtemelen SIP, STUN, TURN, RTCP, RTP, XAMPP, mDNS, vb. Gibi bir düzine farklı standart içerir. .

IMO, "soketleri bilen" biri ilk (demo seviyesi, salt metin) sohbet programını araştırma yaparken yardım dosyalarında (ve benzeri) fazla zaman harcamadan birkaç saat içinde kodlayabilmelidir. En azından "gerçek" bir sohbet programı üzerinde çalışan bazı daha önceki deneyimler iddia sürece, ben bile bu tür şeyler için hangi RFC / standartlar uygulanan bile bilmek beklemem.

Aynı durum genel olarak geçerlidir: insanların ağlar üzerinden yaptıkları tüm farklı şeylere uygulanan RFC'lerin (ve diğer çeşitli standartların) sayısı göz önüne alındığında, herhangi birinin hepsini ezberlemesini beklemek mantıksızdır. Bununla birlikte, insanların kolayca "yerel" bir programda işlemesini beklediğiniz bir şey için bir dizi gereksiniminiz varsa, yalnızca bir gereksinim olarak "ağ üzerinden" eklemek normalde çok büyük bir zorluk eklememelidir. (ancak ağ gecikmesi gibi sorunlarla uğraşmak olabilir).


1 Unix'teki soketler de Unix ailesi soketlerini destekler, ancak bunlar (en azından normal olarak) ağ içinde değil, makine içi IPC için kullanılır. Ayrıca, soketlerin gerçekten desteklemediği yönlendirici yönetimi gibi düzinelerce başka protokol de vardır (ham soketlerin ötesinde, rasgele paketler oluşturmanıza ve göndermenize izin verir).


Teşekkürler, şimdi bu oylamaya değer bir cevap. :-) Peki, soket programlamayı bildiğimi söylersem bunun "TCP / UDP" ile " her şeyi " ele almak anlamına geldiğini söyleyebilir miyim ? TCP / UDP hakkında her şeyi bilmem gerekiyor mu?
Aquarius_Girl

@AnishaKaul: Düzenlenmiş cevaba bakınız.
Jerry Coffin

@JerryCoffin: Soketlerin IP tabanlı protokollerin bir alt kümesi olduğunu da belirtmek gerekir. ICMP / IP gibi soketler tarafından kapsanmayan şeyler de vardır.
Matthew Scharley

6

"ağ programlama" bazı ağ teknolojisi gerektirir - örneğin, RPC. Soketler (büyük olasılıkla BSD soketlerini kastediyorsunuz) bu teknolojiye bir örnektir. Yani "soket programlama", "ağ programlama" nın bir alt kümesidir.


@Anisha Kaul: Tamam, RPC programlama ağ programlama (bunun bir altkümesi) ve önemli bir RPC kavramı sözde dize bağlamadır - bkz. Msdn.microsoft.com/en-us/library/aa378691(v=VS.85) .aspx BSD soketlerini programlarken buna ihtiyacınız yoktur.
sharptooth

@Anisha Kaul: Hayır, "tüm olasılıklar" çok büyük bir liste. Bazı yaygın olarak kullanılan isimler - Java RMI ve .NET Remoting iyi örneklerdir.
sharptooth

-3

Evet, ağ programlamanın ağ teknolojisi gerektirdiği doğrudur, öte yandan soket programlama ağ programlamanın bir alt kümesidir. Mevcut ağ programlamasının çoğu ya doğrudan soketler kullanılarak ya da soketlerin üstündeki diğer çeşitli katmanlar kullanılarak yapılır.


3
Bu, önceki yanıtlarda zaten gönderilenler üzerine önemli bir şey eklemiyor gibi görünüyor
gnat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.