Berk Akademi
Ana Sayfa
ÖZEL KODLAMA DERSLERİ
Yazılım Özel Ders
Tüm birebir programlara genel bakış
Python Yazılım Kursu
Sıfırdan ileri seviyeye birebir Python
Java Yazılım Kursu
OOP odaklı birebir Java eğitimi
AP Computer Science Principles
AP CSP sınav hazırlığı
GRUP DERSLERİ
Python & Django Masterclass
SINIRLI KONTENJAN
Java & Spring Boot Masterclass
SINIRLI KONTENJAN
C# .NET Masterclass
SINIRLI KONTENJAN
VİDEO DERSLER
Sıfırdan Temel Python Kursu
Kendi Hızında Öğren
ÜCRETSİZ
Seviye Testi
Ücretsiz — Python, Java, algoritma seviye testleri
Kariyerini Keşfet
Sertifika Doğrula
Belge numarası ve soyad ile doğrulama

Localhost Nedir? Port Numarası Nasıl Çalışır ve Hatalar Nasıl Çözülür?

localhost-port-numarasi-nedir-hata-cozumu
Bu yazıda neler var?
  1. Localhost Nedir ve Neden Kullanılır?
  2. Port Numarası Nasıl Çalışır ve Nasıl Seçilir?
  3. Python ile Localhost Sunucusu Başlatma ve Test Etme
  4. Address Already in Use Hatası Neden Oluşur ve Nasıl Çözülür?
  5. Localhost ve Port Bilgisi API Geliştirmede Neden Önemlidir?
  6. Sık Sorulan Sorular

Localhost, bilgisayarınızda çalışan bir sunucuya yine aynı bilgisayar üzerinden bağlanmanızı sağlar. 127.0.0.1 bu yerel makineyi ifade eden loopback adresidir; port numarası ise bilgisayarda hangi uygulama veya ağ servisinin hedefleneceğini belirtir. Örneğin http://localhost:8000 adresi, kendi bilgisayarınızdaki 8000 numaralı portta çalışan yerel web sunucusuna istek gönderir.

Bu yapı, ilk web veya API projenizi internete açmadan denemenin en pratik yollarından biridir. Kodunuzu hızlıca çalıştırabilir, tarayıcıdan veya bir API istemcisinden test edebilir ve bağlantı sorunlarını kontrollü bir ortamda inceleyebilirsiniz.

Localhost Nedir ve Neden Kullanılır?

Localhost, en basit ifadeyle “bu bilgisayarın kendisi” anlamına gelir. Bilgisayarınızda bir web sunucusu, API veya başka bir ağ uygulaması çalıştırdığınızda, bu uygulamaya yine aynı bilgisayardaki tarayıcıdan bağlanabilirsiniz. Tarayıcı, isteği internetteki uzak bir sunucuya göndermek yerine bilgisayarınızda çalışan yerel süreci hedefler.

Örneğin bir Python projesi üzerinde çalıştığınızı ve projenizin tarayıcıya bir web sayfası gönderdiğini düşünün. Sunucuyu yerel olarak başlattığınızda tarayıcıya http://localhost:8000 yazabilirsiniz. Python öğrenirken yerel sunucu, dosya işlemleri veya basit API denemeleri yapan bir proje geliştiriyorsanız Python özel ders programı gibi uygulamalı bir çalışma modeli, bu adresleme mantığını yalnızca teoride değil, doğrudan çalışan örneklerle kavramanıza yardımcı olabilir.

Localhost ile 127.0.0.1 aynı şeyi mi ifade eder?

Çoğu günlük kullanımda localhost ile 127.0.0.1 aynı bilgisayarı hedeflemek için kullanılır. Ancak teknik olarak bunlar aynı türde ifade değildir:

  • localhost, yerel makineyi ifade eden bir ana bilgisayar adıdır.
  • 127.0.0.1, IPv4 adresleme sisteminde loopback amacıyla kullanılan özel bir adrestir.
  • Loopback, gönderilen isteğin ağ üzerinden başka bir cihaza gitmek yerine aynı bilgisayara geri yönlendirilmesi anlamına gelir.
  • İki ifade de tek başına belirli bir uygulamayı göstermez; hangi uygulamaya bağlanılacağını port numarası belirler.

Bu nedenle localhost yazdığınızda bilgisayarınızın tamamına veya bilgisayardaki bütün programlara bağlanmış olmazsınız. İstek, belirtilen portta bağlantı kabul eden bir servis varsa o servise ulaşır. Örneğin:

  • http://localhost:3000 → yerel makinede 3000 numaralı portu dinleyen uygulama
  • http://127.0.0.1:5000 → yerel makinede 5000 numaralı portu dinleyen uygulama
  • http://localhost:8000 → yerel makinede 8000 numaralı portu dinleyen uygulama

Tarayıcı localhost’a bağlanırken ne olur?

Tarayıcıya bir adres yazdığınızda istemci olarak hareket eder. İstemci, bir sunucuya istek gönderir ve sunucudan yanıt bekler. İnternette bir web sitesini açarken istek uzak bir sunucunun adresine gider. Localhost kullanırken ise istemci ve sunucu aynı bilgisayarda bulunur.

Bu farkı bir restoran benzetmesiyle düşünebilirsiniz:

  • IP adresi veya ana bilgisayar adı, restoranın bulunduğu binayı gösterir.
  • Port numarası, binadaki belirli kapıyı veya hizmet masasını gösterir.
  • Localhost, başka bir binaya gitmek yerine kendi bulunduğunuz binayı hedeflemek gibidir.
  • Sunucu uygulaması çalışmıyorsa hedef kapıda kimse bulunmaz ve tarayıcı bağlantı hatası gösterir.

Bu model, “tarayıcı neden sayfayı açamıyor?” sorusunu anlamayı kolaylaştırır. Sorun her zaman kodun içinde olmayabilir. Sunucu hiç başlatılmamış, farklı bir portta çalışıyor veya istek yanlış adrese gönderiliyor olabilir.

İlk projelerde localhost kullanmanın avantajları

Localhost özellikle geliştirme aşamasında kullanılır çünkü uygulamayı herkese açık bir sunucuya taşımadan önce temel davranışları incelemenizi sağlar. Bir web sayfasını, REST API’yi veya dosya sunucusunu önce kendi bilgisayarınızda test ederek daha kontrollü ilerleyebilirsiniz.

  • Hızlı deneme: Kodda yaptığınız değişikliği kısa sürede çalıştırıp sonucu tarayıcıda görebilirsiniz.
  • Yerel kontrol: Geliştirme sırasında uygulamanın çalışma mantığını kendi bilgisayarınızda inceleyebilirsiniz.
  • Dış erişim gerektirmeme: Basit testler için uygulamanızı herkese açık bir adrese yüklemeniz gerekmez.
  • Hata ayıklama kolaylığı: Sunucunun başlayıp başlamadığını, hangi portu kullandığını ve hangi yanıtı verdiğini daha rahat gözlemleyebilirsiniz.
  • İstemci-sunucu mantığını öğrenme: Tarayıcı, API istemcisi ve yerel sunucu arasındaki iletişimi gerçek bir örnek üzerinde görebilirsiniz.

Burada önemli bir ayrım vardır: Localhost bir web sitesi alan adı değildir. Bir alan adı, belirli bir internet kaynağını adlandırmak için kullanılır. Localhost ise isteğin yerel makineye yönlendirilmesini sağlayan bir adresleme biçimidir. Bu yüzden localhost üzerinde çalışan bir proje, otomatik olarak internette yayınlanmış anlamına gelmez.

Port Numarası Nasıl Çalışır ve Nasıl Seçilir?

Port Numarası Nasıl Çalışır ve Nasıl Seçilir?

Port numarası, aynı bilgisayarda çalışan farklı ağ servislerini ayırt etmeye yarayan mantıksal kapı numarası gibi düşünülebilir. IP adresi veya localhost bilgisayarı hedefler; port numarası ise o bilgisayarda hangi hizmetle iletişim kurulacağını belirtir.

Örneğin localhost:8000 ifadesinde localhost yerel bilgisayarı, 8000 ise bu bilgisayardaki belirli portu gösterir. Bu portta bir web sunucusu çalışıyorsa tarayıcı sunucudan yanıt alabilir. Aynı bilgisayarda başka bir uygulama 3000 numaralı portu kullanıyorsa, localhost:3000 isteği farklı bir sürece gider.

IP adresi ile port arasındaki fark

Başlangıçta IP adresi ve port numarası birbirine karıştırılabilir. İkisi farklı görev üstlenir:

Öğe Görevi Örnek
IP adresi veya ana bilgisayar adı Bağlanılacak makineyi belirtir. localhost, 127.0.0.1
Port numarası Makinedeki hedef ağ servisini belirtir. 8000, 5000
Birleşik adres Belirli makinedeki belirli servise ulaşmayı sağlar. http://localhost:8000

Bu ayrım, bağlantı hatalarını incelerken oldukça kullanışlıdır. localhost doğru olsa bile uygulamanız 8000 yerine 3000 numaralı portta çalışıyor olabilir. Benzer şekilde doğru port yazılmış olsa bile o portu dinleyen bir sunucu bulunmayabilir.

80, 443, 3000, 5000, 8000 ve 8080 ne anlama gelir?

Yazılım geliştirme sırasında bazı port numaraları diğerlerinden daha sık karşınıza çıkabilir. Ancak bunlar her proje için zorunlu seçimler değildir. Bir portun belirli bir uygulamada kullanılması, o portun yalnızca o uygulamaya ait olduğu anlamına gelmez.

  • 80: HTTP iletişimiyle ilişkilendirilen yaygın porttur.
  • 443: TLS/SSL üzerinden HTTP, yani HTTPS iletişimiyle ilişkilendirilen porttur.
  • 3000: Geliştirme sırasında web arayüzleri ve yerel uygulamalar için sık tercih edilen örneklerden biridir.
  • 5000: Yerel web uygulamaları ve API denemelerinde karşılaşılabilen bir başka geliştirme portudur.
  • 8000: Basit HTTP sunucuları ve yerel geliştirme çalışmalarında sık kullanılan seçeneklerden biridir.
  • 8080: Alternatif HTTP portu olarak kayıtlıdır ve web geliştirme ortamlarında da yaygın biçimde görülür.

IANA Service Name and Port Number Registry kayıtlarında 80 numaralı port HTTP, 443 numaralı port HTTPS ile ilişkilendirilirken 8080 numaralı port “HTTP Alternate” açıklamasıyla yer alır. Bu kayıtlar, bir portun protokolle ilişkilendirilebileceğini gösterir; günlük geliştirme alışkanlıkları ise ekipten ekibe veya araçtan araca değişebilir. 3000, 5000 ve 8000 gibi değerleri bu nedenle kesin bir standart değil, uygulama yapılandırmalarında görülen pratik tercihler olarak değerlendirmek gerekir.

Port numarası seçerken hangi ölçütler kullanılmalı?

Yerel bir proje için port seçerken belirli bir sayıyı ezberlemekten çok, aşağıdaki karar çerçevesini kullanmak daha doğrudur:

  1. Kullanımda olmayan bir port seçin. Başka bir uygulama aynı portu dinliyorsa sunucunuz başlayamayabilir ve “address already in use” veya “port already in use” hatası alabilirsiniz.
  2. Proje ekibinin tercihine uyun. Takım içinde herkes farklı port kullanırsa dokümantasyon, test komutları ve yerel kurulum adımları karışabilir.
  3. Portu yapılandırmada açıkça belirtin. Port numarasını kodun farklı yerlerine dağınık biçimde yazmak yerine yapılandırma dosyası, ortam değişkeni veya başlangıç komutu üzerinden yönetmek daha sağlıklıdır.
  4. Servisleri ayırt edilebilir tutun. Aynı bilgisayarda frontend, API ve veritabanı gibi birden fazla servis çalışıyorsa her biri için farklı port kullanın.
  5. Dokümantasyona yazın. Projeyi kuran kişi hangi adresi açacağını ve hangi portun kullanılacağını ilk bakışta anlayabilmelidir.

Örneğin bir projede web arayüzünü localhost:3000, API’yi localhost:5000 ve basit bir dosya sunucusunu localhost:8000 üzerinden çalıştırabilirsiniz. Bu yalnızca örnek bir düzenlemedir; gerçek seçim, kullandığınız araçların varsayılanlarına, ekip kararlarına ve bilgisayarınızdaki mevcut süreçlere göre yapılmalıdır.

Bir portu değiştirmek genellikle uygulamanın çalışma mantığını değiştirmez; yalnızca istemcinin bağlanacağı adres değişir. Bu nedenle sunucuyu 8000 yerine 8001 numaralı portta başlatırsanız tarayıcıda da http://localhost:8001 adresini kullanmanız gerekir. En sık yapılan hatalardan biri sunucunun yeni portta çalıştığını unutup eski adresi tarayıcıda açmaya devam etmektir.

Localhost ve port kavramlarını birlikte düşündüğünüzde bağlantı adresini şu şablonla okuyabilirsiniz: protokol://makine:port. Örneğin http://127.0.0.1:8000 ifadesi, HTTP protokolüyle aynı bilgisayardaki 8000 numaralı portu hedefleyen bir isteği anlatır. Bu temel yapı, bir sonraki adımda Python ile küçük bir yerel HTTP sunucusu başlatırken doğrudan kullanılacaktır.

Python ile Localhost Sunucusu Başlatma ve Test Etme

Python ile Localhost Sunucusu Başlatma ve Test Etme

Python ile bilgisayarınızdaki bir klasörü birkaç saniye içinde tarayıcıdan erişilebilir hâle getirebilirsiniz. Bunun için Python’un http.server modülünü kullanmak yeterlidir. Sunucu yalnızca kendi bilgisayarınızda çalışacak şekilde 127.0.0.1 adresine ve örnek olarak 8000 portuna bağlanabilir; ardından tarayıcıdan http://127.0.0.1:8000 adresini açarak sonucu test edebilirsiniz.

http.server modülü, temel dosya sunumu ve yerel geliştirme denemeleri için hazırlanmış basit bir HTTP sunucusu sağlar. Python’un resmî belgelerinde modülün komut satırından python -m http.server [port] biçiminde çalıştırılabildiği, varsayılan klasörün mevcut terminal klasörü olduğu ve --bind seçeneğiyle belirli bir adrese bağlanılabildiği açıklanır. Bu modül üretim ortamında kullanılmak üzere tasarlanmış kapsamlı bir web sunucusu değildir. Python http.server belgeleri komutun seçeneklerini ve kullanım sınırlarını ayrıntılı olarak açıklar.

1. Sunucu klasörünü hazırlayın

Önce test etmek istediğiniz dosyaların bulunduğu bir klasör oluşturun. Örneğin masaüstünde localhost-deneme adında bir klasör açın ve içine şu dosyalardan birini ekleyin:

  • index.html
  • notlar.txt
  • ornek.py

Bu dosyaların içeriği önemli değildir. Amaç, Python sunucusunun çalıştığı klasördeki dosyaları tarayıcıya nasıl sunduğunu gözlemlemektir.

Daha sonra terminali bu klasörün içinde açın. Terminalin çalışma dizini doğru değilse Python, sizin görmek istediğiniz dosyalar yerine terminalin bulunduğu başka bir klasörü sunabilir.

Terminalde bulunduğunuz klasörü kontrol etmek için işletim sisteminize göre şu komutlardan yararlanabilirsiniz:

  • Windows: cd
  • macOS ve Linux: pwd

Klasör içeriğini kontrol etmek için Windows’ta dir, macOS ve Linux’ta ise ls komutu kullanılabilir.

2. Python HTTP sunucusunu başlatın

Sunucuyu yalnızca kendi bilgisayarınızdaki localhost adresine bağlamak için terminale şu komutu yazın:

python -m http.server --bind 127.0.0.1 8000

Bazı sistemlerde Python komutu python3 adıyla çalışabilir. Böyle bir durumda aynı komutu şu biçimde deneyebilirsiniz:

python3 -m http.server --bind 127.0.0.1 8000

Komut doğru çalışırsa terminal kapanmaz ve sunucu çalışmaya devam eder. Terminalde Python’un bir HTTP sunucusunu belirli bir adreste ve portta dinlemeye başladığını belirten bir mesaj görürsünüz. Görünen mesajın yazım biçimi işletim sistemi ve Python ortamına göre değişebilir; önemli olan komutun hata vermeden terminali açık tutmasıdır.

Bu aşamada terminali kapatmayın. Terminal penceresi sunucu sürecinin çalıştığı yerdir. Pencereyi kapatırsanız veya çalışan işlemi durdurursanız sunucu da kapanır.

3. Tarayıcıdan localhost adresini test edin

Tarayıcınızı açın ve adres çubuğuna şu adresi yazın:

http://127.0.0.1:8000

Sunucu doğru klasörde başlatıldıysa tarayıcıda o klasörde bulunan dosyaların listelendiği basit bir sayfa görürsünüz. Klasörde index.html varsa bazı durumlarda bu dosyanın içeriği doğrudan açılabilir; aksi hâlde klasör içeriği bağlantılar hâlinde listelenebilir.

Örneğin notlar.txt dosyasına tıklarsanız tarayıcı dosyanın metin içeriğini gösterebilir. index.html dosyasına giderseniz HTML belgesinin tarayıcı tarafından yorumlanmış hâlini görürsünüz. Bu küçük deney, istemci ile sunucu arasındaki temel akışı görünür hâle getirir:

  1. Tarayıcı, 127.0.0.1 adresindeki yerel bilgisayara istek gönderir.
  2. İstek, 8000 portunu dinleyen Python sürecine ulaşır.
  3. Python sunucusu, çalıştırıldığı klasörde ilgili dosyayı arar.
  4. Dosyayı bulursa tarayıcıya HTTP yanıtı gönderir.
  5. Tarayıcı da yanıtı sayfa, metin veya dosya içeriği olarak gösterir.

Tarayıcıdan sayfayı her yenilediğinizde terminalde yeni bir istek satırı görebilirsiniz. Bu satır, tarayıcının sunucuya ulaştığını ve sunucunun isteği işlediğini gösterir. Örneğin GET / ifadesi, tarayıcının kök dizini istediği anlamına gelir.

4. Aynı işlemi kısa bir Python dosyasıyla gösterin

Komut satırı kullanımının yanı sıra, aynı mantığı kısa bir Python dosyasıyla da görebilirsiniz. Aşağıdaki kodu sunucu.py adıyla kaydedin ve dosyayı çalıştırmak istediğiniz klasöre koyun:

from http.server import SimpleHTTPRequestHandler
from socketserver import TCPServer

HOST = "127.0.0.1"
PORT = 8000

with TCPServer((HOST, PORT), SimpleHTTPRequestHandler) as server:
    print(f"Sunucu çalışıyor: http://{HOST}:{PORT}")
    server.serve_forever()

Dosyanın bulunduğu klasörde şu komutu çalıştırın:

python sunucu.py

Beklenen terminal çıktısı şöyledir:

Sunucu çalışıyor: http://127.0.0.1:8000

Ardından tarayıcıda yine http://127.0.0.1:8000 adresini açın. Bu kodda SimpleHTTPRequestHandler, geçerli klasördeki dosyaları temel HTTP yanıtlarıyla sunar. TCPServer ise sunucunun belirtilen adres-port birleşiminde dinlemesini sağlar.

Bu örnek, Python öğrenirken yalnızca sözdizimine değil, bir programın işletim sistemiyle nasıl iletişim kurduğuna da bakmanızı sağlar. Değişken, sınıf ve fonksiyon bilgisi; gerçek bir sunucunun başlatılması, istek alması ve durdurulması gibi somut bir akışla birleşir. Bu konuyu uygulamalı biçimde derinleştirmek isteyenler için birebir Python dersleri kapsamında benzer yerel geliştirme senaryoları çalışılabilir.

5. İkinci terminalde aynı portu kullanarak hatayı tetikleyin

İlk terminalde sunucu çalışırken ikinci bir terminal açın. İkinci terminalde yine aynı klasöre geçin ve aynı komutu tekrar çalıştırın:

python -m http.server --bind 127.0.0.1 8000

Bu kez sunucu genellikle başlatılamaz. Çünkü ilk Python süreci zaten 127.0.0.1:8000 birleşimini kullanmaktadır. İkinci süreç aynı IP adresi ve port üzerinde dinleme başlatmaya çalıştığında işletim sistemi bağlantı noktasının kullanımda olduğunu bildirir.

Hata mesajı işletim sistemine ve Python çalışma ortamına göre değişebilir. Örneğin şu ifadelerle karşılaşabilirsiniz:

  • OSError: [Errno 98] Address already in use
  • OSError: [WinError 10048]
  • Address already in use
  • Port already in use

Buradaki ana fikir, Python kodunuzun mutlaka bozuk olduğu değildir. Çoğu durumda sorun, istenen portun başka bir süreç tarafından hâlihazırda dinleniyor olmasıdır.

6. Sunucuyu düzgün biçimde durdurun

İlk terminale dönün ve sunucuyu durdurmak için genellikle Ctrl+C klavye kısayolunu kullanın. İşlem durduktan sonra terminal yeniden komut kabul etmeye başlar. Artık ikinci terminaldeki komutu tekrar çalıştırabilirsiniz.

Sunucuyu durdurmadan terminal penceresini kapatmak, bilgisayarı uykuya almak veya geliştirme aracını zorla sonlandırmak bazı durumlarda teşhisi zorlaştırabilir. Bu nedenle ilk tercih, işlemi sunucunun çalıştığı terminalden kontrollü olarak durdurmaktır.

Address Already in Use Hatası Neden Oluşur ve Nasıl Çözülür?

Address already in use hatası, bir programın bağlanmak istediği IP-port birleşiminin başka bir süreç tarafından kullanıldığını gösteren bir bind problemidir. Buradaki “address” yalnızca IP adresini ifade etmez; uygulamanın bağlanmak istediği adres ile portun birlikte oluşturduğu uç noktayı anlatır. Örneğin 127.0.0.1:8000, IP adresi ve portun birlikte değerlendirilmesiyle oluşan belirli bir bağlantı noktasıdır.

En yaygın senaryo şudur: İlk terminalde Python sunucusu hâlâ çalışıyordur, ancak siz bunu unutmuşsunuzdur. İkinci kez aynı sunucuyu aynı IP ve portla başlatınca işletim sistemi iki sürecin aynı dinleme noktasını paylaşmasına izin vermez. Python’un soket API’sinde bir soketin bağlanacağı adresin zaten bağlı olmaması gerekir; bu nedenle hata, sunucunun dosya klasöründen değil bağlantı kurma aşamasından kaynaklanır. Python socket belgeleri içinde bind() işleminin soketi belirli bir adrese bağladığı ve adresin daha önce bağlı olmaması gerektiği belirtilir.

Önce basit nedeni kontrol edin

  1. Sunucuyu daha önce başlattığınız terminal pencerelerini kontrol edin.
  2. Çalışan bir Python, Flask, Django, Node.js veya başka bir yerel geliştirme süreci olup olmadığına bakın.
  3. Sunucuyu bulduğunuz terminalde Ctrl+C tuşlarına basarak işlemi düzgün biçimde durdurun.
  4. Portun serbest kalmasını bekleyip aynı komutu tekrar çalıştırın.
  5. Hata devam ederse, portu hangi sürecin kullandığını işletim sistemi araçlarıyla araştırın.

Birden fazla proje üzerinde çalışırken aynı portu kullanan bir geliştirme sunucusunu unutmak oldukça kolaydır. Özellikle terminal sekmeleri, IDE iç terminalleri ve arka planda çalışan görevler arttıkça “sunucu çalışmıyor” zannedilen süreç aslında başka bir pencerede açık olabilir.

Windows’ta portu kullanan süreci bulma

Windows’ta Komut İstemi veya PowerShell açarak önce portu dinleyen süreç kimliğini, yani PID değerini arayabilirsiniz:

netstat -ano | findstr :8000

Çıktıda LISTENING durumundaki satıra ve en sağdaki PID değerine bakın. Windows’un netstat komutunda -o seçeneği bağlantıyla ilişkili işlem kimliğini gösterir. Ardından bu PID’nin hangi programa ait olduğunu kontrol edin:

tasklist /FI "PID eq 1234"

Buradaki 1234 yerine kendi çıktınızda gördüğünüz PID değerini yazın. Windows’un resmî belgelerinde tasklist çalışan süreçleri ve PID bilgilerini listelemek için, taskkill ise belirli bir PID veya program adına göre süreci sonlandırmak için açıklanır. Sürecin gerçekten size ait ve kapatılabilir olduğundan emin olmadan sonlandırma komutu kullanmayın.

Gerekli kontrolü yaptıktan sonra süreç kapanmıyorsa Windows’ta şu biçimde sonlandırılabilir:

taskkill /PID 1234 /T

/T seçeneği belirtilen sürecin alt süreçleriyle birlikte sonlandırılmasını ister. Zorla kapatma seçeneğini kullanmadan önce normal durdurma yöntemlerini denemek daha güvenlidir.

macOS ve Linux’ta port kontrolü

macOS ve Linux sistemlerinde portu kullanan süreci bulmak için yaygın olarak lsof veya Linux’ta ss gibi soket inceleme araçları kullanılır. Örnek olarak:

lsof -i :8000

Linux sistemlerinde yalnızca dinleyen TCP soketlerini görmek için şu komut da kullanılabilir:

ss -ltnp | grep :8000

Çıktıdaki PID ve program adına bakarak önce ilgili terminale dönüp Ctrl+C kullanın. Terminale erişemiyorsanız, sürecin size ait olduğundan emin olduktan sonra PID’yi kontrollü biçimde sonlandırabilirsiniz:

kill 1234

Linux’ta kill komutu varsayılan olarak sürece sonlandırma sinyali göndermek için kullanılır. Zorla sonlandırma seçenekleri, programın temiz kapanış işlemlerini gerçekleştirmesine fırsat vermeyebileceği için ilk adım olarak tercih edilmemelidir.

Portu değiştirmek ne zaman doğru çözümdür?

Port değiştirmek her zaman hatanın kök nedenini çözmez. Eğer eski sunucunun neden kapanmadığını anlamadan sürekli farklı portlar seçerseniz aynı sorun kısa süre sonra başka bir portta tekrarlanabilir. Ancak aşağıdaki durumlarda port değiştirmek mantıklı olabilir:

  • Portu kullanan süreç başka bir proje için bilerek çalışıyorsa.
  • Aynı bilgisayarda iki yerel sunucuyu aynı anda çalıştırmanız gerekiyorsa.
  • Proje dokümantasyonu veya ekip standardı farklı bir port belirliyorsa.
  • Portu kullanan uygulamayı kapatmanız mümkün değilse.

Bu durumda ikinci sunucuyu örneğin başka bir portta başlatabilirsiniz:

python -m http.server --bind 127.0.0.1 8001

Yeni adres bu kez http://127.0.0.1:8001 olur. Tarayıcı, API istemcisi veya başka bir program içinde eski portu kullanan adresleri de buna göre güncellemeniz gerekir.

Hızlı karar kontrol listesi

  • Eski sunucu açık mı? Açık ise önce Ctrl+C ile durdurun.
  • Portu başka bir proje mi kullanıyor? Kullanıyorsa o projeyi kapatmak yerine farklı port seçin.
  • Portu kullanan süreci tanıyor musunuz? Tanımıyorsanız rastgele sonlandırmayın.
  • PID’yi doğruladınız mı? Doğrulamadıysanız işletim sistemi aracından tekrar kontrol edin.
  • Portu değiştirdiniz mi? Tarayıcıdaki ve proje ayarlarındaki adresi de güncelleyin.
  • Hata devam ediyor mu? IP adresi, port numarası ve komut yazımını birlikte kontrol edin.

Localhost ve Port Bilgisi API Geliştirmede Neden Önemlidir?

API geliştirirken localhost ve port bilgisi, istemcinin doğru sunucuya ulaşmasını sağlayan temel adres bilgisidir. Tarayıcı, Postman benzeri bir API istemcisi veya başka bir program; HTTP isteğini yalnızca doğru localhost adresinde, doğru portu dinleyen ve gerçekten çalışmakta olan sunucuya gönderebilir. Bu nedenle bir API isteği başarısız olduğunda yalnızca kodu değil, adresi, portu, sunucu durumunu ve endpoint yolunu birlikte kontrol etmek gerekir.

İstemci-sunucu iletişimini basitçe şöyle düşünebilirsiniz: İstemci bir istek gönderir, sunucu bu isteği belirli bir port üzerinden dinler ve uygun bir yanıt döndürür. Örneğin yerel bir API sunucusu 8000 portunda çalışıyorsa istemcinin isteği şu yapıya sahip olabilir:

http://127.0.0.1:8000/users

Burada 127.0.0.1 bilgisayarın kendi ağ arayüzünü, 8000 port numarasını, /users ise sunucuda çağrılmak istenen endpoint yolunu ifade eder. Endpoint, API içinde belirli bir işleve veya veri kaynağına ulaşmak için kullanılan URL bölümüdür.

İstemci ile sunucu arasındaki port ilişkisi

Bir tarayıcıda adres yazdığınızda veya bir API istemcisiyle istek gönderdiğinizde, istemci hedef olarak sunucunun adresini ve portunu kullanır. Sunucu ise o portta gelen istekleri bekler. Bu iki bilgi eşleşmiyorsa bağlantı kurulamaz.

  • Sunucu 8000 portunda çalışıyor, istemci 5000 portuna istek gönderiyorsa istemci yanlış hedefe gider.
  • İstemci doğru portu kullanıyor ancak sunucu başlatılmamışsa bağlantı kurulamaz.
  • Sunucu çalışıyor fakat istek yolu yanlışsa port bağlantısı kurulabilir; bu kez genellikle endpoint ile ilgili bir hata alınır.
  • Sunucu aynı portu başka bir süreç kullandığı için başlatılamıyorsa, istemcinin doğru adresi kullanması tek başına yeterli olmaz.

Bu ayrım başlangıçta önemlidir. Örneğin “bağlantı reddedildi” türü bir hata çoğunlukla o adreste ve portta istekleri karşılayan bir sunucu bulunmadığını düşündürür. Buna karşılık sunucuya ulaşıldığı hâlde 404 Not Found yanıtı alınması, çoğu zaman endpoint yolunun sunucudaki tanımla eşleşmediğini gösterir. Her iki durumda da sorun “localhost çalışmıyor” şeklinde genellenmemelidir.

Yanlış port ile yanlış endpoint arasındaki fark

Yanlış port ve yanlış endpoint farklı katmanlarda ortaya çıkan sorunlardır. Port, isteğin hangi uygulamaya veya sunucu sürecine yönlendirileceğini belirler. Endpoint ise o sunucuya ulaştıktan sonra hangi kaynağın veya işlemin isteneceğini belirtir.

Durum Örnek Muhtemel sonuç
Yanlış port 127.0.0.1:9000 yerine 127.0.0.1:8000 kullanılması Bağlantı reddedilebilir veya başka bir uygulamaya ulaşılabilir.
Yanlış endpoint /users yerine sunucuda bulunmayan /user-list yolunun çağrılması Sunucuya ulaşılır ancak genellikle 404 yanıtı alınır.
Çalışmayan sunucu Sunucu komutu hiç çalıştırılmamış veya işlem kapanmış İstemci bağlantı kuramaz.
Port çakışması Aynı portu başka bir süreç kullanıyor Yeni sunucu başlatılırken address already in use hatası görülebilir.

Bu tablo, hata mesajını doğru yorumlamak için pratik bir başlangıç noktasıdır. Önce bağlantının kurulup kurulmadığına, ardından sunucunun doğru endpoint'i tanıyıp tanımadığına bakmak daha sağlıklı bir teşhis sırası oluşturur.

Proje çalıştırırken kullanılabilecek kontrol listesi

Yerel API'niz beklediğiniz gibi yanıt vermiyorsa aşağıdaki sırayı izleyin:

  1. Sunucunun gerçekten çalıştığını kontrol edin. Sunucuyu başlattığınız terminal penceresinde işlem devam ediyor mu? Başlatma sırasında bir hata veya traceback görünüyor mu?
  2. Adres ve port bilgisini karşılaştırın. Sunucunun terminalde gösterdiği port ile tarayıcıda veya API istemcisinde yazdığınız port aynı mı?
  3. Endpoint yolunu inceleyin. Örneğin sunucuda /hello tanımlıysa istemcide yanlışlıkla /hellos veya /api/hello yazılmış olabilir.
  4. Terminal çıktısını okuyun. Port çakışması, sözdizimi hatası, eksik paket veya uygulamanın kapanmasına neden olan başka bir hata var mı?
  5. İstemci ve sunucunun rollerini ayırın. İstemci istek gönderir; sunucu belirli bir portta istek bekler. İkisinin aynı portu kullanması her zaman gerekmez.
  6. Başka bir sürecin aynı portu kullanıp kullanmadığını kontrol edin. Önceki denemeden açık kalan bir sunucu veya farklı bir uygulama portu meşgul ediyor olabilir.

Özellikle birden fazla proje üzerinde çalışırken port numaralarını proje notlarına yazmak faydalıdır. Terminalde çalışan sunucunun hangi portu kullandığını, istemci isteğinin hangi adrese gittiğini ve çağrılan endpoint'i yan yana kontrol etmek, tahmin ederek hata aramaktan daha hızlı sonuç verir.

Yerel API projelerinde portların aynı olması gerekir mi?

Bir bilgisayarda aynı anda çalışan iki farklı sunucu, aynı localhost adresi ve aynı port birleşimini genellikle paylaşamaz. Örneğin birinci proje 127.0.0.1:8000 adresinde çalışıyorsa ikinci projenin de aynı adreste 8000 portunu dinlemeye çalışması çakışmaya yol açabilir. Bu durumda projelerden biri farklı bir portta başlatılmalıdır.

Ancak istemci ile sunucunun aynı portu kullanması gerekmez. Tarayıcı veya API istemcisi, sunucunun dinlediği hedef porta istek gönderir. İstemcinin kendi bağlantısı için işletim sistemi tarafından kullanılan geçici bir kaynak portu olabilir. Başlangıç seviyesinde hatırlanması gereken temel kural şudur: İstemci, isteğin hedefindeki sunucu adresi ve portuyla eşleşmelidir; istemcinin iç bağlantı ayrıntılarının sunucuyla aynı olması beklenmez.

Localhost, HTTP istekleri ve API iletişimi hakkında farklı örnekleri inceleyerek ilerlemek isterseniz yazılım ve programlama üzerine teknik yazılar arasında ilgili konulara göz atabilirsiniz.

Sık Sorulan Sorular

Localhost ile 127.0.0.1 aynı şey midir?

Çoğu yerel geliştirme senaryosunda aynı bilgisayarı ifade ederler. localhost bir alan adı biçimidir; 127.0.0.1 ise IPv4 üzerinde yerel bilgisayarı gösteren bir IP adresidir. Bir uygulama yalnızca belirli bir adres üzerinde dinleyecek şekilde yapılandırılmışsa iki ifade her durumda aynı davranışı göstermeyebilir. Başlangıç seviyesinde sorun yaşandığında, sunucunun terminalde hangi adres ve portta çalıştığını aynen kullanmak en güvenli yaklaşımdır.

Aynı bilgisayarda iki farklı proje aynı portu kullanabilir mi?

Aynı localhost adresinde ve aynı iletişim protokolünde iki ayrı sunucunun aynı portu aynı anda kullanması genellikle mümkün değildir. İlk sunucu portu tuttuğu için ikinci sunucu başlatılırken address already in use hatası görülebilir. İkinci projeyi farklı bir portta çalıştırabilir veya kullanılmayan süreci kapattıktan sonra aynı portu yeniden deneyebilirsiniz.

Port numarasını değiştirince tarayıcıda hangi adresi yazmalıyım?

Yeni port numarasını localhost adresinin sonuna eklemelisiniz. Sunucuyu 8000 yerine 8080 portunda başlattıysanız örnek adres http://localhost:8080 veya http://127.0.0.1:8080 olur. Belirli bir endpoint çağıracaksanız yolun tamamını da ekleyin; örneğin http://localhost:8080/hello.

Sunucuyu kapattığım hâlde address already in use hatası neden devam eder?

Sunucu işlemi terminal penceresi kapansa bile arka planda çalışıyor olabilir. Ayrıca farklı bir proje veya program aynı portu kullanıyor olabilir. Önce ilgili terminal süreçlerini, geliştirme ortamındaki çalışan görevleri ve portu kullanan işlemleri kontrol edin. Sorun devam ederse uygulamayı farklı bir portta başlatmak, hangi sürecin portu tuttuğunu araştırırken geçici bir çözüm sağlayabilir.

API istemcisi ile yerel sunucunun portları aynı mı olmalıdır?

Hayır. API istemcisinin temel görevi sunucunun dinlediği hedef adrese ve porta istek göndermektir. Örneğin sunucu localhost:8000 üzerinde çalışıyorsa istemci isteğinin hedefi bu adres olmalıdır. İstemcinin kendi bağlantısı için kullandığı kaynak portu farklı olabilir. Önemli olan, istek URL'sindeki hedef portun sunucunun gerçekten dinlediği portla eşleşmesidir.

Doğru adres, doğru port, çalışan sunucu ve geçerli endpoint birlikte kontrol edildiğinde localhost üzerindeki API hatalarının önemli bir bölümü sistematik biçimde teşhis edilebilir.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin — Yazılım Geliştirici ve Eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; bugün öğrencinin seviyesine ve hedefine göre şekillenen sürdürülebilir öğrenme sistemleri tasarlıyor. 500'den fazla kişiye ezber değil, düşünerek kod yazmayı öğretti — Berk Akademi'de izlemeye değil üretmeye dayalı öğrenme kültürünü o kuruyor.

WhatsApp Hemen Ara