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;
Kaynak: Computer Networking: A Top Down Approach, by Kurose and Ross
Emre Bey bir çok yerde arayıp anlayamadığım bilgileri çok akıcı bir dille anlatmışsınız, tesekkkurler.:)
@Snaonsri nin yorumlarina tamamen katılıyorum. Bu eşsiz bilgiler için çok teşekkürler Emre Bektaş