Başka bilgisayarlara hizmet eden bilgisayarlarda belirli port (kapı) numaraları belirli görevler için ayrılmıştır. Örneğin 80 port numarası HTTP protokolüne ayrılmıştır. Yukarıdaki URLConnection sınıfı 80 portu üzerinden bağlanmaktadır.
Socket programlamada bir sunucu (server) ve birden fazla istemci (client) olabilir. Sunucu socket'i dinler ve kurulan socket'lere cevap verir. İstemci ise sunucuya socket açar ve bilgi alışverişinde bulunur.
Aşağıda 5555 portunu dinleyen bir sunucu uygulaması ve bu porta bağlanan bir istemci örneği yapılmıştır. Client sunucuya selam gönderecek ve selam alacaktır. Bir socket açılır ve sonra program sonlanır.
// 5555 portunu dinleyen
// bir server örneği
import java.net.*;
import java.io.*;
public class SocketServerTest {
public static void main(String[] args){
try{
//5555 portunu dinleyen bir
// ServerSocket yaratıyoruz.
ServerSocket ss=new ServerSocket(5555);
System.out.println("bekleniyor..");
// Socket açıldığı zaman
// accept yöntemi çalışır.
Socket s=ss.accept();
System.out.println("socket açıldı.");
InputStream is=s.getInputStream();
InputStreamReader isr
= new InputStreamReader(is);
BufferedReader input
= new BufferedReader(isr);
OutputStream os=s.getOutputStream();
PrintStream output = new PrintStream(os);
String message = input.readLine();
System.out.println(
"Client mesajı: " + message);
output.println("Merhaba Client");
s.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
Bu 5555 portuna bağlanan socket'leri dinleyen bir sunucu uygulamasıdır. ServerSocket (Sunucu Prizi) sınıfının accept() (ona) yöntemi sunucuda socket açılıp açılmadığını dinler. Açıldığı zaman size bir socket nesnesi gönderir. Artık bu nesne ile socket açan client ile iletişim kurabilirsiniz. Aynı socket nesnesi ile veri alabilir ve veri gönderebilirsiniz. Socket açıldıktan sonra getInputStream() (girdi akımını edin) ile veri okuma ve getOutputStream() (çıktı akımını edin) ile verilen stream ile veri yazma gerçekleştirebilirsiniz. Yukarıdaki sunucu kodunda istemciden gelen mesaj okunmuş ve istemciye cevap olarak "Merhaba Client" gönderilmiştir. Uygulama çalıştığında aşağıdaki bekleniyor mesajı yazıp bir socket açılmasını bekleyecektir.
bekleniyor..
İstemci kodu aşağıdaki gibidir.
// Server’a 5555 port'undan
// bağlanan client örneği.
import java.net.*;
import java.io.*;
class SocketClientTest{
public static void main(String[] args){
try{
Socket s=new Socket("localhost",5555);
InputStream is=s.getInputStream();
InputStreamReader isr
= new InputStreamReader(is);
BufferedReader input
= new BufferedReader(isr);
OutputStream os=s.getOutputStream();
PrintStream output = new PrintStream(os);
output.println("Selam Server");
String response = input.readLine();
System.out.println(
"Servet Gönderdiği Mesaj: "
+ response);
}catch(Exception e){
e.printStackTrace();
}
}
}
İstemci ise bir socket nesnesi yaratır. Biz örnek olarak localhost kullandık. Ancak burası herhangi bir sunucu adı olabilir. Socket açtıktan sonra getInputStream() ile okuma ve getOutputStream() ile yazma gerçekleşebilir. Sunucuya "Selam Server" gönderilmekte ve sunucudan gelen mesaj ekrana basılmaktadır.
Sunucu çalıştırılıp, İstemci de çalıştırılırsa sunucuda aşağıdaki çıktı oluşur.
bekleniyor..
socket açıldı.
Client mesajı: Selam Server
Client'ta ise
Servet Gönderdiği Mesaj: Merhaba Client
şeklinde bir çıktı oluşur.