İçindekiler
NS prizler İki veya daha fazla bilgisayarı bir ağ üzerinden iletişim kurmamızı sağlayan arayüzlerdir. Bu sayede, İnternet üzerinden veri iletmemize yardımcı olan farklı türde uygulamalar oluşturabilir ve böylece, aksi takdirde gerçek zamanlı olarak sahip olamayacağımız sonuçları görebiliriz.Soketleri uygulamanın en yaygın yollarından biri protokoldür. TCPBu, işletim sisteminin desteğiyle İnternet üzerinden iletimin normal ve sorunsuz olmasına yardımcı olur.
Soketlerin ne olduğu ile ilgili temel kavramları biraz bildiğimiz için, onların özelliklerini değiştirerek başlayacağız, bunlardan biri bekleme süresidir.
Bekleme zamanıNS bekleme zamanı Soketin veri alırken veya gönderirken ne kadar dikkatli çalışabileceğini belirlememizi sağlar, bu çok önemlidir, çünkü bu süre beklerken uygulamanın tıkanması durumunda tüm sistemi yavaşlatma riskine maruz kalabiliriz. . Bu nedenle, önceden belirlenmiş bekleme süresinin ne olduğunu bilmeye ve kolaylık sağlamak için kendimiz kurabilmeye ihtiyacımız var.
Bunu başarmak için standart kütüphanede bu amaç için var olan birkaç yöntemi kullanabiliriz. priz nın-nin piton.
zaman aşımı ()İlk yöntem zaman aşımı () ve adından da anlaşılacağı gibi parametre olarak ilettiğimiz soketin ilk bekleme süresini bize sunar.
ayar zaman aşımı ()İkinci yöntem ise ayar zaman aşımı () ve işlevselliği, söz konusu soket için milisaniye cinsinden ifade edilen bir zaman aşımı oluşturmaktır.
Şimdi öğrendiklerimizi eyleme geçirmemizi sağlayan küçük bir program oluşturacağız, bunun için önce test nesnemiz olacak soket tipinde bir nesne oluşturacağız, bunun için aileyi geçeceğiz ve yapıcıya soket tipi ve bununla yöntemleri uygulayabiliriz.
Soketimizi oluşturduktan sonra değişiklikleri görmek için, yeni bir nesne olduğu için null olması gereken bekleme süresini yazdıracağız, ardından method ile ayar zaman aşımı () Yeni bir bekleme süresi belirleyeceğiz ve son olarak bilgileri yazdıracağız, böylece her şeyin olması gerektiği gibi çalıştığını teyit edeceğiz.
Tüm bunları başarmak için sahip olduğumuzdan emin olmalıyız. piton sistemimizde kurulu, versiyonunda 2.7, ve programlarla dosyaları oluşturabilmek için bir metin düzenleyiciye sahip olmak, ancak alıştırmayı konsolda da yapabilmemize rağmen, biraz daha rahatsız edici ve kalıcı değil, bu da işimizi kaybedeceğimiz anlamına geliyor. Bu örnek için kaynak koduna bakalım:
#! / usr / bin / env python içe aktarma soketi def timeout_socket (): s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print "İlk zaman aşımı:% s"% s.gettimeout () s. settimeout (100 ) print "Yeni zaman aşımı:% s"% s.gettimeout () if __name__ == '__main__': time_out_socket ()
Bunu adı verilen yeni bir dosyaya kaydedeceğiz. soketTimeWait.py ve konsolda çalıştıracağız, sonuç aşağıdakine benzer bir şey olmalıdır:
NS tampon Soketlerle çalışırken dikkate almamız gereken şeylerden bir diğeri de bu bileşen, o anda iletebileceğimiz veri miktarını gösterecek olan bileşendir. daha fazla tampon Veri miktarı ne kadar fazla olursa, bu aynı zamanda daha fazla kaynak tüketimi ve bunların iletiminde daha uzun bekleme süresi anlamına gelir. Aksi takdirde bir alt tampon Aktarılacak veri miktarını sınırlamasına rağmen daha fazla hızı temsil eder, bu yüzden ustalaşmamız gereken bir beceridir.
setockopt ()Kitaplığın arabelleğini değiştirmemize yardımcı olmak için priz nın-nin piton bize yöntemi sunuyor setockopt(), ki bunu socket sınıfının bir örneğine uygulamamız gerekir. Eğer arabelleğin boyutunu değiştirmek istiyorsak, elbette önce soket arabelleğinin orijinal boyutunu bilmeliyiz, bunun için ayrıca yöntemimiz de var. getockopt () ve yukarıda tarif ettiğimiz yöntemle hemen hemen aynı şekilde kullanılır.
Daha önce anlattıklarımızı göstermek için küçük bir program oluşturacağız, ilk önce göreceğimiz kodda bir çift sabit oluştur programımızda kullanacağımız ve tanımlanacak 4096 kuracağımız tamponların boyutu için bir değerdir.
Daha sonra, hemen tamponun ilk boyutlarını sormak için socket sınıfının bir örneğini yaparız, ardından bunları ekrana yazdırırız.
Sonunda yöntemi kullanacağız setockopt () Programın başında tanımlanan sabitleri kullanarak istenen tampon boyutunu ayarlamak için, bu yöntem üç parametre alır: seviye, ad ve son olarak tampon için değer.
Anlattıklarımızı belirtmemize yardımcı olan kodu görelim, onu adlı bir dosyaya kaydedeceğiz. size_buffer.py:
#! / usr / bin / env python içe aktarma soketi TAM_BUFFER_SEND = 4096 TAM_BUFFER_RECEPCION = 4096 def manipüle_buffer (): sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Soketin gönderme arabelleğinin boyutunu alın sizeBufferopt = sockgetso. (socket.SOL_SOCKET, socket.SO_SNDBUF) print "Buffer Size [Önce]:% d"% Arabellek boyutu sock.setsockopt (socket.SOL_TCP, socket.TCP_NODELAY, 1) sock.setsockopt (socket.SOL_SOCKET, socket.SO_SNDBUFFER_ sock. setockopt (socket.SOL_SOCKET, socket.SO_RCVBUF, SIZE_BUFFER_RECEPCION) buffersize = sock.getsockopt (socket.SOL_SOCKET, socket.SO_SNDBUF) print "Tampon boyutu [Sonra]:% d"% manipüle_buffer_size = '__buffer_buffer_size = '__buffer_buffer = '__buffer_buffer = '__buffer_buffer = =' __ ()
Programımızı yazdıktan sonra konsolda çalıştırmaya devam edeceğiz ve tamponun boyutunu değiştirmeden önce ve sonra değerlerini elde ettiğimizi göreceğiz.
Her tür programda olduğu gibi, soketlerle çalışırken bazı hatalarla karşılaşmaktan muaf değiliz, kaçınmamız gereken konu bu hataların bizi şaşırtmasıdır, çünkü yaparlarsa uygulamamız öngörülemez bir şekilde çalışabilir.
Bu yüzden hataları ele almayı öğrenmeliyiz, bu şekilde beklenmedik bir durum ortaya çıkarsa, programımız ölmez ama bize bir şey olduğunu bildirir, bu sayede Programımızın kararlılığını etkileyen veri bozulması veya benzeri durumlardan kaçınırız.
Nasıl halledilir?Bunu blokları kullanarak başarıyoruz dene - hariç genellikle kontrolümüz dışındaki verileri içeren durumları değerlendirmemizi sağlayan ve bu sayede aldığımız cevaplara göre senaryolar halinde hareket edebildiğimiz. bölüme girersek hariç bloğun, örneğimizin error özelliğini kullanabilir ve onunla ne olduğunu yazdırabilir ve böylece başarısızlığın ne olduğunu bilebiliriz.
Aşağıdaki programda açıklama sırasında tanımladığımız şeyi test edeceğiz. Öncelikle soket oluşturmada bir hata olup olmadığını kontrol eden bir blok oluşturacağız, bununla kodumuzun iyi bir şekilde başlamasını sağlayabiliriz.
Ardından, uygulamamızın belirli bir port üzerinden uzak bir ana bilgisayara bağlantısını değerlendireceğiz ve hata işleme ile özel bir mesaj tanımlayabiliriz. Sonunda fonksiyonumuza çağrı yapıyoruz ve onunla açıklanan eylemleri gerçekleştireceğiz.
adlı bir dosyada saklamamız gereken aşağıdaki kodu görelim. error_socket.py ve sonra konsolda çalıştıracağız:
#! / usr / bin / env python içe aktarma sys içe aktarma soketi ana bilgisayar = 'http: //python.orgt' bağlantı noktası = '06' def error_handling (): deneyin: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) socket.error hariç, e: print "Soket oluşturulurken bir hata oluştu:% s"% e sys.exit (1) deneyin: s.connect ((host, port)) hariç socket.gaierror, e: print "Hata bağlantı adresinde:% s "% e sys.exit (1), socket.error hariç, e: print" Bağlantı hatası: % s "% e sys.exit (1) eğer __name__ == '__main__': error_handling ()
Burada kütüphaneyi kullandığımızı görüyoruz. sistem yöntemi kullanmak için çıkış () ve bir hata oluştuktan sonra programı kapatın. Ayrıca ana bilgisayarın yanlış olduğunu da not ediyoruz, bu yüzden hatayı zorlayabilir ve böylece mesajı ekranda görebiliriz. Son olarak, soket hatasını yakalamak için e değişkenini kullandığımızı not ediyoruz, bununla olanın gerçek detayını elde edebiliriz.
UnutmaBurada özellikle dikkatli olmalıyız. girinti kodun bunu hatırla piton Köşeli ayraçlar kullanılmadığında, blok kapanışlarını tanımlamak için de noktalı virgüller yalnızca kullandığımız boşluklara veya sekmelere bağlıdır, bu nedenle doğru yapmazsak sözdizimi hataları görürüz.
belgelerini okumamız çok önemlidir. Python soket kitaplığı böylece kaynaklarınızdan yararlanmanın daha fazla ve daha iyi yollarını bulabilirsiniz.
Bununla bu öğreticiyi bitiriyoruz, nasıl olduğunu anladık piton dünyasına erişmemizi sağlayan çok kolay anlaşılır araçlara sahiptir. prizlerBununla, ağdaki diğer makinelerden veya hatta İnternet'ten bilgi almak gibi gerçek zamanlı işlemleri gerçekleştirmek için ağları kullanan uygulamaları programlamaya başlayabiliriz.Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.