Press "Enter" to skip to content

Python ile Web Socket Kullanımı

Betül ÇİL 0

Web Socket, tek bir TCP bağlantısı üzerinden tam çift yönlü iletişim kanalı sağlayan bir bilgisayar iletişim protokolüdür. WebSocket, web tarayıcılarında ve web sunucularında uygulanmak üzere tasarlanmıştır, fakat herhangi bir istemci veya sunucu uygulaması tarafından uygulanabilmektedir. WebSocket protokolü, TCP tabanlı bağımsız bir protokoldür. HTTP ile tek ilişkisi, HTTP sunucuları tarafından bir Upgrade isteği olarak yorumlanmasıdır.

WebSocket protokolü, sunucuya ve sunucudan gerçek zamanlı veri aktarımını sağlayarak, tarayıcı ile web sunucusu arasında etkileşimi sağlamaktadır. Bu, sunucunun istemci istemeden tarayıcıya içerik gönderebileceği ve bağlantıyı açık tutarak istediği zaman mesaj alabilmesini veya gönderebilmesini sağlayan standart bir yöntem ile sağlanmaktadır. Bu şekilde, tarayıcı ile sunucu arasında iki yönlü devam eden bir iletişim gerçekleşebilmektedir.

>> import socket

Öncelikle python socket kütüphanesini import edelim. Daha sonra socket nesnesi oluşturalım.

>> serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

Socket nesnesi oluşturduk. Burada ilk argümanın socket.AF_INET olması, bunun bilinen IP adresi soketi olduğunu gösteriyor. Alternatif olarak birde socket.AF_UNIX var ki, bu UNIX soketleri için kullanılıyor. Dolayısıyla her sistemde bu sabit tanımlı olmayabilir.

İkinci argüman ise bu soketin iletişim tipini gösteriyor. Kullandığımız socket.SOCK_STREAM, en yaygın kullanılan TCP iletişim tipidir.

>> serversocket.bind((socket.gethostname(), 80))

Sunucu görevi görecek bir soketin bağlantı kabul etmeden önce, bir adresle ilişkilendirilmesi gerekir. socket.gethostname() bize bilgisayarımızın ağda kendini hangi isimle tanıttığını gösteren bir fonksiyondur. Bunun yerine, localhost veya “” da kullanılabilirdi. Ancak bu durumda, bu soket sadece o bilgisayardan gelen isteklere açık olur. Ağdaki diğer bilgisayarlar, bu soketimize bağlanamazlar.

İkinci argüman olarak da port numarası belirledik. Soketimizin bu portla ilişkilendirilebilmesi için, bu portun kullanımda olmaması gerekir. Eğer başka bir program bilgisayarınızdaki 80 numaralı portu işgal ediyorsa, işletim sistemi sizin soketinize bu portu vermeyecektir. Bu gibi durumlarda, ya o portu kullanan işlemin o portu bırakmasını beklemeli (soketi kapatmasıyla olur) ya da kendinize başka bir port seçmelisiniz. Port numarası olarak 0 vererek, işletimi sisteminin sizin için uygun bir port seçmesini isteyebilirsiniz.

>> serversocket.bind((socket.gethostname(),0))

>> serversocket.getsockname()
('xxx.xxx.xx.2', 52541)

Örneğin; işletim sistemimizin bize 52541 numaralı portu tayin ettiğini görüyoruz.

>> serversocket.listen(10)

Soketimizi bir adresle ilişkilendirdikten sonra, artık o adresi dinlemeye başlayabiliriz. Argüman olarak verdiğimiz 10 sayısı, işletim sisteminin bizim için ne kadar bağlantı isteğini sırada bekleteceğini gösteriyor. Bu durumda, 10 kişi sırada beklerken eğer 11. kişi bu sokete bağlanmak isterse, o kişi için bağlantı reddedilecek.

Artık bağlantı istekleri işletim sistemi tarafından kabul edilip sıraya konmaya başlandı. Sırada bekleyen ilk isteğimizi kabul edelim;

>> (clientsocket, address) = serversocket.accept()

accept() metodu bize bir tuple döndürür. İlk elemanı, bir client sokettir. Kabul ettiğimiz bağlantıyla iletişim kurmak için, bunun send ve recv metotlarını kullanacağız. Bunun ikinci elemanı da, iki elemandan oluşan başka bir tuple olup, ilk elemanı karşı soketin IP adresi, ikinci elemanı da portudur.

Kodumuza genel olarak bakacak olursak;

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind((socket.gethostname(), 0))

server.listen(5)

print "{}:{} dinleniyor...".format(*server.getsockname())

while True:
    try:
        client, address = server.accept()
        print "{}:{} bağlandı".format(*address)
        print client.recv(4096)
        client.send("Isleyen kod bug tutmaz :)")
        client.close()
    except KeyboardInterrupt:
        break

server.close()

Bu programı çalıştırdığınızda, hangi adresi dinlediğini size bildirecek. O adresi internet tarayıcınızla ziyaret ederseniz (doğru portu kullandığınızdan emin olun), tarayıcıda “Isleyen kod bug tutmaz 🙂“, program çıktısında da tarayıcının size gönderdiği HTTP başlıklarını göreceksiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

bakırköy escort afyon escort afyon escort ağrı escort ardahan escort artvin escort aksaray escort amasya escort antalya escort alanya escort aydın escort balıkesir escort bandırma escort bayburt escort bartın escort batman escort bitlis escort bingöl escort bodrum escort bolu escort bursa escort çanakkale escort çerkezköy escort çorum escort düzce escort çeşme escort diyarbakır escort edirne escort erzincan escort erzurum escort erzurum escort elazığ escort eskişehir escort gaziantep escort giresun escort gümüşhane escort hatay escort hatay escort hakkari escort içel escort ığdır escort ısparta escort kars escort maraş escort kayseri escort karabük escort kıbrıs escort kırıkkale escort kırklareli escort kilis escort kırşehir escort konya escort kuşadası escort kütahya escort manisa escort manavgat escort marmaris escort mardin escort malatya escort mersin escort muğla escort muş escort nevşehir escort niğde escort ordu escort osmaniye escort rize escort samsun escort sakarya escort seyhan escort siirt escort sivas escort sinop escort şırnak escort şırnak escort tekirdağ escort trabzon escort tokat escort tunceli escort urfa escort uşak escort van escort yalova escort yozgat escort zonguldak escort izmit escort izmit escort izmit escort istanbul escort avcılar escort esenyurt escort mecidiyeköy escort şişli escort beylikdüzü escort halkalı escort kadıköy escort pendik escort istanbul escort kurtköy escort pendik escort beylikdüzü escort esenyurt escort escort bayan istanbul escort bayan escort escort bayan