Java'da istemci ve sunucu arasında sürekli açık kalacak bir socket yaratılıp, o socket üzerinde veri alış verişi yapılabilir .
Aşağıdaki sınıf bir client socket'i ile input ve output stream açmaktadır. Veri geldiği sürece inputstream'den okur ve outputstrem'e yazar :
code:/java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class RequestHandler extends Thread{
private Socket socket;
public RequestHandler(Socket socket) {
this.socket=socket;
}
@Override
public void run() {
try {
BufferedReader input = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
PrintStream output = new PrintStream(socket.getOutputStream());
while(true) {
String message = input.readLine();
if(message!=null) {
System.out.println("Client message: " + message);
output.println("Hello Client");
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
code/:
Bir portu dinleyen ve yeni bir istek geldiğinde bir socket ve RequestHandler yaratıp başlatan sınıf aşağıdaki gibidir :
code:/java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class PingServer extends Thread {
private ServerSocket serverSocket = null;
public TypeBPingServer(int port) throws IOException {
serverSocket = new ServerSocket(port);
}
@Override
public void run() {
while (true) {
try {
System.out.println("wait...");
Socket socket = serverSocket.accept();
System.out.println("socket is accepted");
RequestHander requestHandler=new RequestHandler(socket);
requestHandler.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
code/:
Yeni bir socket açıldığında RequestHandler yaratılır ve başlatılır. Artık o socket üzerinde veri alış verişini RequestHandler sınıfı yapar.
Sunucu uygulaması aşağıdaki gibi yapılır ve çalıştırılır :
code:/java
import java.io.IOException;
public class PingServerApplication {
public satic void main(String[] args) throws IOException {
int port=Integer.parseInt(args[0]);
PingServer pingServer=new PingServer(port);
pingServer.start();
}
}
code/:
Uygulama sadece bir portu dinleyen PingServer'ı çalıştırır.
Şimdi kullanıcı mesaj girdiği sürece sunucu ile veri alış verişi yapacak olan istemciyi yaratabiliriz. Kullanıcı quit yazdığında socket kapatılır ve uygulamadan çıkılır.
code:/java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class PingClientApplication {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket s = new Socket("localhost", 9091);
Scanner scanner = new Scanner(System.in);
while(!scanner.nextLine().equals("quit")) {
PrintStream output = new PrintStream(s.getOutputStream());
output.println("Hello Server");
BufferedReader input = new BufferedReader(
new InputStreamReader(s.getInputStream()));
String response = input.readLine();
System.out.println("response : "+response);
}
scanner.close();
s.close();
}
}
code/:
İstemci uygulaması 9091 portunda çalışan sunucu uygulamasına socket açar. Kullanıcı quit yazana kadar girdiği mesajlar sunucuya gönderilir.
Önce sunucu çalıştırılır. Sunucu çalıştırıldığında ekranda wait .. yazısı gözükür ve bir istemcinin socket açmasını bekler.
İstemci çalıştırıp, kullanıcı herhangi bir şey girdiğinde, örneğin a girsin, aşağıdaki gibi bir çıktı oluşur :
pre:/output
wait...
socket is accepted
wait...
Client message: Hello Server
pre/:
İstemci uygulamasındaki çıktı ise :
pre/:
a
response : Hello Client
pre/:
Kullanıcı bundan sonra quit dışında girildiği her şey de istemci veriyi sunucuya gönderir, sunucu da Hello Client cevabını verir.