Merhaba Arkadaşlar
Bu yazımda biraz java networking konusuna değineceğim.
Uygulama olarakta eclipse te bir sunucu ve istemci oluşturup birbirlerine mesaj
göndermeyi deneyeceğim. Uygulamaya geçmeden önce birkaç tanımdan bahsetmek
istiyorum.
Socket : Bilgisayarların
ağ üzerinden haberleşmesini sağlayan yapılar olarak düşünebilirsiniz.
Uygulamamızda da socket oluşturup öyle
haberleşmeye çalışacağız. Ip adresine veya server adresine ihtiyacımızda
olacak. Hangi bilgisayar iletişim kurulacak , ıp adresi ile belirleyeceğiz.
client : Hizmet
isteyen olarak adlandırabiliriz. Türkçe olarak da istemci olarak adlandırılır.
Sunucu : server olarakta adlandırılan bu yapılar ,
istemciye hizmeti veren yapılardır.
Yani uygulamamızda bir sunucu ve istemci olacaktır. Aradaki
haberleşme socket/portlar üzerinden olacaktır. Sunucu nun sürekli açık olması
gerekmektedir. Bu tür uygulamalarda
dikkat etmeniz gereken noktalardan bir tanesi , açtığınız portları işiniz
bittiğinde kapatmanızdır. Kapatmaz iseniz arka planda sürekli boş yere çalışır
,bellekten yer ve ayrıca uygulamayı tekrar çalıştırdığınız da port zaten açık
ise hata alabilirsiniz.
Anlatacak çok şey var bana göre ama ben her şeyi ve tüm
fonksiyonları yazının uzamaması için anlatmayacağım. Temelinde neler var onlara değinmeye
çalışacağım Bunu da kod üzerinden anlatmayı düşünüyorum. Bu konu ile alakalı
sunucu ve istemci tarafında çalışan metotlara da bakmanızda fayda var. ben
hepsini anlatmak isterdim ancak çokta uzatmak istemiyorum. Basit bir sunucu ve
istemci oluşturmak için gerekli olan metotlara değineceğim.
Ayrıca internette 1 -1024 arası portlar genel olarak nette
kullanılan belirli portlar olduğu için ,
port numarası verirken bu sayılar arasındaki değerleri vermeyin hata alırsınız.
Şimdi Kodlar üzerinden anlatmaya çalışayım.
Sunucu Tarafı :
import java.net.*;
import java.io.*;
public class MyServer extends Thread {
//sunucu tarafında
çalışacak bir socket tanımlıyoruz
//istemci den
gelecek veriyi okuması için
private ServerSocket serverSocket;
public MyServer() throws IOException {
//bir port açıyoruz.İstemci ile
haberleşme bu port üzerinden olacak.
//1-1024 arası olmamasına dikkat edin.
serverSocket = new
ServerSocket(5217);
}
public void run() {
while(true) {
try {
//getlocalport() metodu , sunucuya bağlanan
istemciyi görmenizi sağlar
System.out.println("Waiting
for client on port " + serverSocket.getLocalPort() + "...");
//Serversocket sunucu tarafında ki
socket.Port açmak için kullanıyoruz
//Socket türündeki değişkeni ise
istemci den veri alması için kullanacağız.
//accept() metodu , sunucunun ,istemciyi dinlemesini yani istemciden veri almasını sağlar.
Socket server = serverSocket.accept();
//getInputStream() metodu istemciden
gelen mesajı almak için
//DatainputStream ise gelen mesaj ile
sunucu tarafında işlem yapmak için kullanacağız.
//Yani istemciden gelen mesajı
DataInputStream içerisine atıyoruz.
//Bunun için iki metod vardır:
//input stream : istemciden gelen
mesaj word , excel gibi veya daha farklı veri paketleri ise kullanılır.
//input stream i kullanırsanız eğer ,
gelen mesajın ne olduğunu bulmanız ve ona göre parse etmeniz gerekir.
//Datainputstream : istemciden gelen
mesaj int ,string,char gibi primitive tipinde ise kullanılır.
DataInputStream in = new
DataInputStream(server.getInputStream());
//istemciden aldığım mesajı ekrana
yazdırıyorum
//readLine, readInt ,readFloat gibi
bir çok seçenek mevcut
System.out.println(in.readUTF());
//Dataoutput stream da sunucudan
,istemciye veri gönderilmek için kullanılır
//output stream şeklinde bir kullanımı
daha vardır.
//input stream ve datainputstream arasında
ki kullanım farkı bunlar içinde geçerli
DataOutputStream out = new
DataOutputStream(server.getOutputStream());
out.writeUTF("Bağlandık " + server.getLocalSocketAddress()
+ "\Güle Güle!");
//işiniz bittikten sonra portun kapatılması
gerektiğiniden bahsetmiştik
server.close();
}catch(SocketTimeoutException s)
{
System.out.println("Socket
timed out!");
break;
}catch(IOException e)
{
e.printStackTrace();
break;
}
}
}
public static void main(String []
args) {
try {
Thread t = new MyServer();
t.start();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
İstemci Tarafı
import java.net.*;
import java.io.*;
public class MyClient {
public static void main(String [] args) {
try {
//İstemci için bir socket tanımlıyoruz.
//ilk parametre ip adres , ikinci
parametre ise sunucu tarafında açtığımı port
Socket client = new Socket("localhost", 5217);
//bağlantı kurulan adresi görme
System.out.println("Bağlanıldı
: " + client.getRemoteSocketAddress());
// server tarafında buralara değindik
OutputStream GoServer =
client.getOutputStream();
DataOutputStream out = new
DataOutputStream(GoServer);
out.writeUTF("Merhaba
: " + client.getLocalSocketAddress());
InputStream inFromServer =
client.getInputStream();
DataInputStream in = new
DataInputStream(inFromServer);
System.out.println("Server
:" + in.readUTF());
client.close();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
Bu ve başka projeleri kaynak kodları ile beraber github adresim https://github.com/bhtyrsm da bulabilirsiniz.
Öncelikle serverı çalıştırın. Sonra clienti çalıştırın.Server çalışmadan client bağlantı kuramaz ve hata alırsınız.
Herhangi bir sorunda ileşime geçebilirsiniz .umarım faydalı olmuştur .Kolay gelsin.
Herhangi bir sorunda ileşime geçebilirsiniz .umarım faydalı olmuştur .Kolay gelsin.
Hiç yorum yok:
Yorum Gönder