Merhabalar, ben Bunjo. Bu konuda, Java dilinde socketlerin kullanımlarını anlatacağım.
Java Socketleri Hakkında
Java'da socketler platformlara bağımlı olmadan çalışabilir. Düşük seviyeye yakın kontrol sunar bu sayede fazla kontrol yapabilirsiniz.
Fazla kontrol sonucunda, kullanımları size oldukça karmaşık gelebiir. Aynı zamanda oldukça stabil çalışırlar.
Java'da socketler platformlara bağımlı olmadan çalışabilir. Düşük seviyeye yakın kontrol sunar bu sayede fazla kontrol yapabilirsiniz.
Fazla kontrol sonucunda, kullanımları size oldukça karmaşık gelebiir. Aynı zamanda oldukça stabil çalışırlar.
Basit TCP İstemcisi (Client)
Java:
import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String[] args) {
String serverName = "localhost"; // Sunucu adresi
int port = 12345; // Sunucu port numarası
try {
Socket socket = new Socket(serverName, port);
// Veri gönderme
OutputStream outToServer = socket.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF("Merhaba, sunucu!");
// Veri alma
InputStream inFromServer = socket.getInputStream();
DataInputStream in = new DataInputStream(inFromServer);
System.out.println("Sunucudan gelen mesaj: " + in.readUTF());
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Bu program, her yerde örnek olarak verilen basit ve tipit bir TCP istemcisi oluşturmak ve bir sunucuya bağlanarak veri gönderip almak için kullanılır.
Java:
import java.io.*;
import java.net.*;
Girdi-çıktı vermek ve bağlantı kurmak için gerekli paketler burada aktarılıyor.
Sınıf tanımlamaları yapılıyor.
Sınıf tanımlamaları yapılıyor.
Java:
String serverName = "localhost"; // Sunucu adresi
int port = 12345; // Sunucu port numarası
Socket sunucusu için tanımlanan sunucu ve port değişkenleri
IP adresi ve port numarası argümanlarını alarak yeni bir Socket nesnesi oluşturur.
try bloğu, bir istisna (bu durumda bir IOException) fırlatabilecek kodu içerir.
Java:
ServerSocket serverSocket = new ServerSocket(port);
IP adresi ve port numarası argümanlarını alarak yeni bir Socket nesnesi oluşturur.
try bloğu, bir istisna (bu durumda bir IOException) fırlatabilecek kodu içerir.
Java:
OutputStream outToServer = socket.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF("Merhaba, sunucu!");
OutputStream outToServer = socket.getOutputStream(); Socket nesnesiyle ilişkili çıkış akışını alır. Çıkış akışları, bir hedefe veri yazmak için kullanılır.
DataOutputStream out = new DataOutputStream(outToServer); OutputStream'u sararak UTF-8 gibi belirli formatlarda veri yazmaya izin veren bir DataOutputStream nesnesi oluşturur.
out.writeUTF("Merhaba, sunucu!"); "Merhaba, sunucu!" dizesini UTF-8 karakter kodlaması kullanarak çıkış akışına yazar (veri hedefe iletilir).
Java:
InputStream inFromServer = socket.getInputStream();
DataInputStream in = new DataInputStream(inFromServer);
System.out.println("Sunucudan gelen mesaj: " + in.readUTF());
Yukarıda bahsettiğim çıkış akışı için, bir giriş akışı oluşturur. Oluşturulan bu giriş akışından gelen veri alınır ve Sunucudan gelen mesaj metni ile birleştirilerek ekrana yazdırılır.
Java:
in.close();
out.close();
socket.close();
serverSocket.close();
close() fonksiyonu ile kaynaklar kapatılır.
TCP Sunucusu (Server)
TCP Sunucusu (Server)
Java:
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) {
int port = 12345; // Sunucu port numarası
try {
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Sunucu başlatıldı, istemci bağlantısı bekleniyor...");
while (true) {
Socket socket = serverSocket.accept(); // İstemci bağlantısını kabul et
System.out.println("Yeni istemci bağlantısı: " + socket);
// Veri alma
InputStream inFromClient = socket.getInputStream();
DataInputStream in = new DataInputStream(inFromClient);
System.out.println("İstemciden gelen mesaj: " + in.readUTF());
// Veri gönderme
OutputStream outToClient = socket.getOutputStream();
DataOutputStream out = new DataOutputStream(outToClient);
out.writeUTF("Merhaba, istemci!");
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Sunucu Başlatılır:
port değişkeni, sunucunun hangi portta dinleyeceğini belirler. ServerSocket nesnesi, belirtilen portta bir sunucu soketi oluşturur.
"Sunucu başlatıldı, istemci bağlantısı bekleniyor..." mesajı ekrana yazdırılır.
İstemci Bağlantısı Kabul Edilir:
serverSocket.accept() yöntemi, gelen bir istemci bağlantısını bekler ve onu bir Socket nesnesi olarak döndürür.
"Yeni istemci bağlantısı: " + socket mesajı ekrana yazdırılır.
Veri Alınır:
socket.getInputStream() yöntemi, istemciden gelen veri akışını döndürür. DataInputStream nesnesi, veri akışını sararak UTF-8 kodlamasıyla veri okumanıza izin verir.
in.readUTF() yöntemi, istemciden gelen mesajı okur ve ekrana basar.
Veri Gönderilir:
socket.getOutputStream() yöntemi, istemciye veri göndermek için bir veri akışı döndürür. DataOutputStream nesnesi, veri akışını sararak UTF-8 kodlamasıyla veri yazmanıza izin verir.
out.writeUTF("Merhaba, istemci!") yöntemi, "Merhaba, istemci!" mesajını istemciye gönderir.
Bağlantı Kapanır:
socket.close() yöntemi, istemci bağlantısını kapatır ve kullanılan kaynakları serbest bırakır.
UDP İstemci (Client)
Bağlantı işine girilmez, ver, alınıp gönderilir.
Java:
import java.io.*;
import java.net.*;
public class UDPClient {
public static void main(String[] args) {
String serverName = "localhost"; // Sunucu adresi
int port = 9876; // Sunucu port numarası
try {
DatagramSocket socket = new DatagramSocket();
InetAddress serverAddress = InetAddress.getByName(serverName);
String message = "Merhaba, sunucu!";
byte[] sendData = message.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, port);
socket.send(sendPacket);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
UDP Sunucusu (Server)
Java:
import java.io.*;
import java.net.*;
public class UDPServer {
public static void main(String[] args) {
int port = 9876; // Sunucu port numarası
try {
DatagramSocket socket = new DatagramSocket(port);
byte[] receiveData = new byte[1024];
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
socket.receive(receivePacket);
String message = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("Gelen mesaj: " + message);
// İstemciye cevap gönderme
InetAddress clientAddress = receivePacket.getAddress();
int clientPort = receivePacket.getPort();
String replyMessage = "Merhaba, istemci!";
byte[] sendData = replyMessage.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientPort);
socket.send(sendPacket);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
URL Bağlantısı
Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.*;
class URLConnectionExample {
public static void main(String[] args) {
try {
URL url = new URL("http://httpbin.org/get");
URLConnection connection = url.openConnection();
// Bağlantıyı aç
connection.connect();
// Veri okuma
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// Bağlantıyı kapat
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
URL nesnesi, erişmek istediğimiz web adresini temsil etmek için oluşturulur. HTTP istekleriniz test edebileceğiniz örnek bir site kullandım.
URLConnection, URL'ye bağlantıyı kurmak ve sunucuyla iletişim kurmak için kullanılır.
connection.connect(), URL'ye bağlantıyı açar ve sunucuyla iletişim kurmaya başlar.
BufferedReader nesnesi, sunucudan gelen verileri satır satır okumak için kullanılır.
while döngüsü, sunucudan veri geldiği sürece devam eder.
Her döngüde, reader.readLine() yöntemi bir satır okur ve System.out.println() fonksiyonu ile konsola basar.
Çıktı:
URLConnection, URL'ye bağlantıyı kurmak ve sunucuyla iletişim kurmak için kullanılır.
connection.connect(), URL'ye bağlantıyı açar ve sunucuyla iletişim kurmaya başlar.
BufferedReader nesnesi, sunucudan gelen verileri satır satır okumak için kullanılır.
while döngüsü, sunucudan veri geldiği sürece devam eder.
Her döngüde, reader.readLine() yöntemi bir satır okur ve System.out.println() fonksiyonu ile konsola basar.
Çıktı:
Rich (BB code):
{
"args": {},
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "Java/21.0.2",
"X-Amzn-Trace-Id": "Root=1-66857e1a-2db2943147fa799929a834be"
},
"origin": "",
"url": "http://httpbin.org/get"
}
Okuyan herkese teşekkür ederim. Raw socket, multicast, web socket ve https bağlantılarına daha sonra yazacağım konularda belirteceğim.
Son düzenleme:





