Java Socket

Java ile işlemler ve bilgisayarlar arasında iletişim için kullanılan socket programlama veya ağ programlama ile ilgili bilgiler yer alıyor.

Socket nedir?

Socket bilgisayar işlemleri veya bilgisayarlar arası işlemler için kullanılan haberleşme dosyalarıdır.

Socket programlama nedir?

Socket programlama veya Ağ programlama gelen isteklerin yönetilmesini sağlayan programlama tekniktir.

Soket programlama nerelerde kullanılır?

Soket programlama bilgisayarlar arası veri haberleşmesinde kullanılır.

HTTP, FTP, SMTP gibi iletişim protokolleri soket yapısı üzerine inşa edilmiştir.

Soket programlama ile neler yapılabilir?

Soket yapısı kullanılarak bilgisayarlar arası erişim sağlanarak veri haberleşmesi yapılır.

Ayrıca kendi kurallarımızı belirleyerek chat-sohbet, dosya transferi gibi uygulamalar yapabiliriz.

Soket programlama birçok modern programlama dili ile yapılmaktadır.

Bu diller temel olarak işletim sistemi seviyesinde çalışan çeşitli sistem çağrılarının arayüzlerini kullanır.

Java Socket kullanımı

Socket işlemleri için java.net paketinde yer alan çeşitli sınıflar kullanılır.

Sunucu ve istemcinin olduğu temel bir yapıda ServerSocket ve Socket sınıflarının kullanımı yeterli olacaktır.

Java ile bir sunucu oluşturmak için ServerSocket sınıfı kullanılır.

Sınıf sunucu oluşturmak için aşağıdaki kuruculara sahiptir.

ServerSocket();
ServerSocket(int port);
ServerSocket(int port, int backlog);
ServerSocket(int port, int backlog, InetAddress bindAddr);

port: giriş noktası,

backlog: Bağlantı kurmak için bekleyecek kullanıcı sayısı,

bindAddr: Sunucu ip adresi

Sunucu oluşturmak için sadece port numarasını vermek yeterli olacaktır.

Sunucu oluşturulduktan sonra gelen istekleri kabul etmek için accept metodu kullanılır.

Metot dönüş değeri olarak Socket türünden bir nesne döndürür.

Socket sınıfında yer alan çeşitli metotlar kullanılarak sunucu ve istemci arasında iletişim sağlanır.

Son olarak socket sunucusu ile işlem bittiğinde close metodu ile sunucunun kapatılması faydalı olacaktır.

import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class JavaServer {

    public static void main(String[] args) {

        ServerSocket serverSocket;
        Socket clientSocket;
        DataInputStream dataInputStream;
        String mesaj;
        try {
            serverSocket = new ServerSocket(1453);
            clientSocket = serverSocket.accept();
            dataInputStream = new DataInputStream(clientSocket.getInputStream());
            mesaj = dataInputStream.readUTF();
            System.out.println("Alınan mesaj: " + mesaj);
            serverSocket.close();
        } catch (IOException ex) {
            System.err.println(ex);
        }

    }

}

Örnekteki socket sunucusu gelen istekleri accept ile kabul etmektedir.

İstek kabul edildikten sonra Socket sınıfında yer alan getInputStream metodu ile istemciden gelen veriler okunmuştur.

İstemciye bir veri göndermek istenildiğinde getOutputStream metodu kullanılır.

Metotlar byte formatında işlem yaptığından DataInputStream ve DataOutputStream sınıfları ile Text tabanlı veri gönderimi yapılmıştır.

İstemci oluşturmak için Socket sınıfı kullanılır.

Sınıf sunucu ve port bilgilerini alan çeşitli kuruculara sahiptir.

Socket();
Socket(Proxy proxy);
Socket(String host, int port);
Socket(InetAddress address, int port);
Socket(String host, int port, InetAddress localAddr, int localPort);

Aşağıdaki örnek aynı bilgisayardaki 1453 port numaralı sunucuya erişerek Merhaba ağ programlama yazısını göndermektedir.

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class JavaClient {

    public static void main(String[] args) {

        Socket serverSocket;
        DataOutputStream dataOutputStream;
        try {
            serverSocket = new Socket("localhost", 1453);
            dataOutputStream = new DataOutputStream(serverSocket.getOutputStream());
            dataOutputStream.writeUTF("Merhaba ağ programlama");
            serverSocket.close();
        } catch (IOException ex) {
            System.err.println(ex);
        }

    }

}

Sunucu işlemlerinde veri gönderme ve alma işlemleri byte biçiminde olduğundan gönderilen ve alınan değerler kontrol edilerek dosya transfer işlemi yapılabilir.

Ayrıca Java içerisinde yer alan Thread kullanılarak bir sunucunun birden fazla istemciye hizmet etmesi sağlanabilir.

Socket programlamada veri transferi için Java içerisinde yer alan Input/Output sınıfları ve metotlarının iyi bilinmesi faydalı olacaktır.

Java Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!