crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Network Programming: Java Sockets
1. Socket Nedir? (İletişim Noktası)
Bir Socket, ağ üzerindeki iki program arasındaki çift yönlü iletişim bağının uç noktasıdır. İletişim için iki temel bileşene ihtiyaç duyulur:
IP Adresi: Cihazın ağdaki kimliği (Örn: 127.0.0.1 - localhost).
Port Numarası: Cihazdaki hangi uygulamanın veriyi alacağını belirleyen kapı numarası (Örn: 8080, 5000).
2. Server (Sunucu) Tarafı: Kapıyı Açan Taraf
Sunucu, belirli bir portu dinlemeye başlar ve bir istemcinin bağlanmasını bekler. ServerSocket sınıfı bu iş için kullanılır.
Java:
try (ServerSocket serverSocket = new ServerSocket(5000)) {
System.out.println("Sunucu 5000 portunda hazır, bağlantı bekleniyor...");
// İstemci bağlandığında kabul et
Socket socket = serverSocket.accept();
System.out.println("Bir istemci bağlandı!");
// Veri okuma ve gönderme araçları
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
String mesaj = input.readLine();
System.out.println("İstemciden gelen: " + mesaj);
output.println("Merhaba İstemci, mesajını aldım!");
} catch (IOException e) {
e.printStackTrace();
}
3. Client (İstemci) Tarafı: Bağlantıyı Başlatan Taraf
İstemci, sunucunun IP adresini ve port numarasını bilerek ona bir istek gönderir. Socket sınıfı kullanılır.
Java:
try (Socket socket = new Socket("localhost", 5000)) {
// Veri gönderme ve okuma araçları
PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
output.println("Selam Sunucu, ben geldim!");
String cevap = input.readLine();
System.out.println("Sunucunun cevabı: " + cevap);
} catch (IOException e) {
e.printStackTrace();
}
4. TCP vs UDP: Hangi Protokol?
Java'da ağ programlaması yaparken iki ana protokol seçeneğiniz vardır:
| Özellik | TCP (Socket) | UDP (DatagramSocket) |
|---|---|---|
| Bağlantı | Bağlantı odaklı (Önce el sıkışma yapılır). | Bağlantısız (Veri doğrudan fırlatılır). |
| Güvenilirlik | Garantili. Veri kaybolursa tekrar gönderilir. | Garanti yok. Veri kaybolabilir. |
| Hız | Daha yavaş (Kontrol mekanizmaları var). | Çok hızlı. |
| Kullanım | Web (HTTP), E-posta, Dosya Transferi. | Canlı yayın, Online oyunlar, VoIP. |
5. Çoklu İstemci Desteği (Multi-threaded Server)
Yukarıdaki basit sunucu örneği aynı anda sadece bir istemciyi kabul edebilir. Gerçek dünyada bir sunucunun yüzlerce kişiye hizmet vermesi için her yeni bağlantıyı ayrı bir Thread (İş Parçacığı) içinde çalıştırması gerekir.
Java:
while (true) {
Socket socket = serverSocket.accept();
// Her yeni bağlantı için yeni bir thread başlat
new Thread(new ClientHandler(socket)).start();
}
Sonuç
Java ile Socket programlama, alt seviye ağ protokolleri ile üst seviye uygulama kodunuz arasındaki köprüdür. Bugün çoğu geliştirici REST veya GraphQL gibi yüksek seviyeli API'ler kullansa da, bu sistemlerin nasıl çalıştığını anlamak için Socket mantığını bilmek "Junior" ile "Senior" arasındaki en büyük farklardan biridir.