Java ile TCP-UDP Server/Client Uygulamaları

Merhaba arkadaşlar bugün sizlere TCP ve UDP server cliend bağlantılarının java ile nasıl yapılabileceği hakkında kodlar vereceğim.
TCP server/client dosyası ve UDP server/client java dosyalarını kodlarda belirttim. Ek olarak benim eklediğim bir bölüm var.
Benim amacım linux üzerinden bir server kurup örneğin robotu kontrol etmek ve robottan gelen verileri kod içerisinde yorumlamaktı. Örnek olarak sizlere .equals komutunu göstereceğim.
UDP Server.java dosyasında bulunana sentenceyi direkt olarak kullanamıyoruz. Eğer clienttan emre komutunu yollarsak
stringin boyutu 1024(byte[] dizisinin boyutu) oluyor. Bizim bunu indirgememiz gerekiyor ki gelen veriyi yakalayabilelim.
// olan satısı kaldırıp diğerlerini eklerseniz işlem tamam oluyor. clientden emrebektas gönderirsem emre tespit edildi 🙂 şeklinde output vermesi gerekiyor.
Tekrarlamış oluyorum ama bu değişikliği yapmayıp sentence.equalsIgnoreCase(“emrebektas”) yazarsanız emrebektas’ı yakalayamazsınız. çünkü emrebektas’ın uzunluğu 10 iken sentence uzunluğu 1024.

// String sentence = new String( receivePacket.getData());
String sentence = new String( receivePacket.getData(),0,receivePacket.getLength(),"UTF-8");
if(sentence.equalsIgnoreCase("emrebektas"))
System.out.println("emre tespit edildi :)");
System.out.println("RECEIVED: " + sentence);

 

Örnek olması amacıyla makalenin sonunda UDP server/client uygulama örneği ekledim.

TCPServer.java

import java.io.*;
import java.net.*;

class TCPServer
{
   public static void main(String argv[]) throws Exception
      {
         String clientSentence;
         String capitalizedSentence;
         ServerSocket welcomeSocket = new ServerSocket(6789);

         while(true)
         {
            Socket connectionSocket = welcomeSocket.accept();
            BufferedReader inFromClient =
               new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
            DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
            clientSentence = inFromClient.readLine();
            System.out.println("Received: " + clientSentence);
            capitalizedSentence = clientSentence.toUpperCase() + '\n';
            outToClient.writeBytes(capitalizedSentence);
         }
      }
}

TCPClient.java

import java.io.*;
import java.net.*;

class TCPClient
{
 public static void main(String argv[]) throws Exception
 {
  String sentence;
  String modifiedSentence;
  BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
  Socket clientSocket = new Socket("localhost", 6789);
  DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
  BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
  sentence = inFromUser.readLine();
  outToServer.writeBytes(sentence + '\n');
  modifiedSentence = inFromServer.readLine();
  System.out.println("FROM SERVER: " + modifiedSentence);
  clientSocket.close();
 }
}

 

 

UDPServer.java

import java.io.*;
import java.net.*;

class UDPServer
{
   public static void main(String args[]) throws Exception
      {
         DatagramSocket serverSocket = new DatagramSocket(9876);
            byte[] receiveData = new byte[1024];
            byte[] sendData = new byte[1024];
            while(true)
               {
                  DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                  serverSocket.receive(receivePacket);
                  String sentence = new String( receivePacket.getData());
                  System.out.println("RECEIVED: " + sentence);
                  InetAddress IPAddress = receivePacket.getAddress();
                  int port = receivePacket.getPort();
                  String capitalizedSentence = sentence.toUpperCase();
                  sendData = capitalizedSentence.getBytes();
                  DatagramPacket sendPacket =
                  new DatagramPacket(sendData, sendData.length, IPAddress, port);
                  serverSocket.send(sendPacket);
               }
      }
}

 UDPClient.java

import java.io.*;
import java.net.*;

class UDPClient
{
   public static void main(String args[]) throws Exception
   {
      BufferedReader inFromUser =
         new BufferedReader(new InputStreamReader(System.in));
      DatagramSocket clientSocket = new DatagramSocket();
      InetAddress IPAddress = InetAddress.getByName("localhost");
      byte[] sendData = new byte[1024];
      byte[] receiveData = new byte[1024];
      String sentence = inFromUser.readLine();
      sendData = sentence.getBytes();
      DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
      clientSocket.send(sendPacket);
      DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
      clientSocket.receive(receivePacket);
      String modifiedSentence = new String(receivePacket.getData());
      System.out.println("FROM SERVER:" + modifiedSentence);
      clientSocket.close();
   }
}


 

Örnek Program;

java tcp-udp communication

 

Kaynak: Computer Networking: A Top Down Approach, by Kurose and Ross

Emre Bektaş

Computer Engineer C# / Java Developer

You may also like...

2 Responses

  1. snaonsri says:

    Emre Bey bir çok yerde arayıp anlayamadığım bilgileri çok akıcı bir dille anlatmışsınız, tesekkkurler.:)

  2. BARIŞ LEBLEBİCİ says:

    @Snaonsri nin yorumlarina tamamen katılıyorum. Bu eşsiz bilgiler için çok teşekkürler Emre Bektaş

Leave a Reply

Your email address will not be published. Required fields are marked *