Soket Programlama


   GitHub

           

          Soket Programala ile Chat uygulaması yapımı 


    Kaynak kodlarına direk yukarıda ki Github linki üzerinden ulaşabilirsiniz.


Uygulamanın görselleri 

Client(istemci) 






Server(Sunucu) 




Server Sınıfı

static ServerSocket ss;
static Socket s;
static DataInputStream dis;
static DataOutputStream dos;


Tanımlanan kütüphanelerden üretilen nesneler.

String msjin ="";
        
        try{
        ss =new ServerSocket(1201);
        s=ss.accept();
        dis=new DataInputStream(s.getInputStream());
        dos =new DataOutputStream(s.getOutputStream());
       

        while(!msjin.equals("-cık"))
        {
       
              msjin=dis.readUTF();
              textArea.setText(textArea.getText().trim()+"\n Client: \n"+msjin);
        }
       
        }catch(Exception e){
        JOptionPane.showMessageDialog(parent,
                        "Bağlantı kurulmadı veya koptu!",
                       "Uyarı",
                       JOptionPane.WARNING_MESSAGE);
             
       
        }
Try Catch Yapısı ile Sunucunun İstemci ile aralarında ki bağlantının olup olmadığı kontrol edilip kullanıcıya bildiriliyor.

Try yapısı içerisinde Port dinleniyor, bağlantı kuruluyor input ve output kütüphanelerinden üretilen nesnelerin nere ile bağlantı kuracakları gösteriliyor.
while döngüsü içerisine İstemci tarafından ‘-cık’ string’i gelmiyorsa giriyor ve burdada data input stream kütüphanesinden üretilen dis.readUTF tarafından okunan string TextArea ya bastırılıyor.
Eğer bağlantı kurulamaz ise Catch’e düşüyor ve burda da kullanıcıya hata mesajı veriliyor.

Button.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                   String msjout="";
                   try{
                         msjout=textField.getText().trim();
                         dos.writeUTF(msjout);
                         textArea.setText(textArea.getText().trim()+"\nServer: \n"+msjout);
                         textField.setText("");
                   }catch(Exception e1){
                        JOptionPane.showMessageDialog(parent,
                                      "Mesaj gönderilemedi",
                                     "Uyarı",
                                     JOptionPane.WARNING_MESSAGE);
                   }
                  
              }
         });

Butonun nesnesinin içerisinde ki actionPerformed methodu ile Textfield da ki mesaj istemciye gönderiliyor.
Burada Try Catch yapısı ile kontrolden geçiyor mesaj eğer gönderilememiş ise Catch yapısına düşüyor. data output stream ile writeUTF fonksiyonuna gönderilen string istemciye gönderiliyor. Ve kendi text area’sınada kendi gönderdiği stringi yazıyor.



İstemci


String msjin="";
        
        
        
         try{            //ilk paremetre ip 2. paremetre port
              s=new Socket("127.0.0.1",1201);                                                 
              dis =new DataInputStream(s.getInputStream());
              dos =new DataOutputStream(s.getOutputStream());
               
              while(!msjin.equals("-cık")){
                  
               msjin=dis.readUTF();
               textArea.setText(textArea.getText().trim()+"\n Server: \n"+msjin);
             
            }
             
             
         }catch(Exception e){
             
           JOptionPane.showMessageDialog(parent,
                        "Bağlantı kurulmadı veya koptu!",
                       "Uyarı",
                       JOptionPane.WARNING_MESSAGE);
             
         }
Sunucuda olduğu gibi burada da aynı durum oluyor farklı olan kışım sadece İstemci portu dinlemiyor hangi porta ve ip numarasına iletişim kuracağını Socket nesne ile belirliyor.
While döngüsü ve Catch yapısı sunucu da yazılan kodlar ile birebir  aynı çalışıyor.




btnNewButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                   String msjout="";
                   try{
                         msjout=textField.getText().trim();
                         dos.writeUTF(msjout);
                         textArea.setText(textArea.getText().trim()+"\n Client: \n"+msjout);
                         textField.setText("");
                   }catch(Exception e1){
                         JOptionPane.showMessageDialog(parent,
                                      "Mesaj gönderilemedi",
                                     "Uyarı",
                                     JOptionPane.WARNING_MESSAGE);
                           
                   }
                  
              }
         });




Hiç yorum yok:

Yorum Gönder