2017-09-04 1 views
0

Ich möchte eine Java-Anwendung erstellen, die die vollständigen Systeminformationen des Clientcomputers an den Servercomputer sendet. Im folgenden Programm kann ich die Aufgabe erreichen, aber die Nachricht wird geteilt, wenn sie auf eine Leerstelle stößt. Ich habe versucht, die Split-Methode zu entfernen, aber es funktioniert nicht.Wie senden Client-System-Eigenschaften an Server-Computer in Java?

Der Client sollte die Informationen Zeile für Zeile gut formatiert an den Server senden.

P.S- Ich hatte auf ein Youtube-Video-Tutorial verwiesen.

Client.java

import java.io.*; 
import java.net.*; 
import java.util.Properties; 

public class MyClient 
{ 
    public static void main(String args[]) 
    { 
     DatagramSocket datagramSocket; 

     try { 
     datagramSocket=new DatagramSocket(); //Creating Datagram socket 
     String message=System.getProperties().toString();  //Creating message 

     byte [] bytes=message.getBytes();  //Converting string message to byte format 
     InetAddress host= InetAddress.getByName("localhost");  //Specifying server address 
     int server_socket=6780;     //Defining the socket tot be used 

      //Sending 
      DatagramPacket request= new DatagramPacket(bytes,bytes.length,host,server_socket); 
      datagramSocket.send(request); 

      //Receiving 
      byte[] buffer=new byte[1000]; 
      DatagramPacket reply= new DatagramPacket(buffer,buffer.length); 
      datagramSocket.receive(reply); 

      //Printing the reply 
      System.out.println("Client Received: "+new String(reply.getData())); 

      //Closing the socket 
      datagramSocket.close(); 
     } 

     catch (Exception e) 
     { 

     } 
    } 
} 

**Server.java** 

import javax.xml.crypto.Data; 
import java.io.*; 
import java.net.*; 


    public class MyServer 
{ 

     public static void main(String[] args) 
{ 
      DatagramSocket datagramSocket=null; 

      try { 
       datagramSocket = new DatagramSocket(6780); 
       byte[] buffer = new byte[1000]; 
       int i=0; 

       while (true) { 
        DatagramPacket request = new DatagramPacket(buffer, buffer.length); 
        datagramSocket.receive(request); 

        String [] arrayMsg= (new String(request.getData())).split(" "); 
        byte [] sendMessage=(arrayMsg[i]+" Server Processed").getBytes(); 
        DatagramPacket reply=new DatagramPacket(sendMessage,sendMessage.length,request.getAddress(),request.getPort()); 

        datagramSocket.send(reply); 
        i++; 


       } 
      } 

     catch (Exception e) { 


       } 
      } 
     } 
+0

Sie könnten versuchen, Auf etwas anderes aufgeteilt. machen Sie etwas, das garantiert ein Token sein wird, "<+>" zum Beispiel, die Chancen, dass jemals auftreten, sind ziemlich minimal. – Stultuske

+0

Sie müssen den Empfang außerhalb der geteilten Schleife verschieben. – EJP

+1

Niemals Schreib-Catch (Exception e) {} Behandeln Sie Exceptions immer poperbly – Jens

Antwort

0

Wenn Sie an jedem Platz spliting in mehrere Pakete vermeiden möchten, entfernen Sie die Schleife, die in Pakete zerlegt, wenn etwas Raum angetroffen wird:

So ersetzen:

while (true) { 
    DatagramPacket request = new DatagramPacket(buffer, buffer.length); 
    datagramSocket.receive(request); 
    String [] arrayMsg= (new String(request.getData())).split(" "); 
    byte [] sendMessage=(arrayMsg[i]+" Server Processed").getBytes(); 
    DatagramPacket reply=new DatagramPacket(sendMessage,sendMessage.length,request.getAddress(), 
    request.getPort()); 
    datagramSocket.send(reply); 
    i++; 
    } 
} 

von:

DatagramPacket request = new DatagramPacket(buffer, buffer.length); 
    datagramSocket.receive(request); 
    byte [] sendMessage = (request.getData() + " Server Processed").getBytes(); 
    DatagramPacket reply = new DatagramPacket(sendMessage, 
         sendMessage.length, request.getAddress(), request.getPort()); 
    datagramSocket.send(reply); 

Eine andere Möglichkeit wäre, am Ende der Zeile aufzuteilen.

Vergessen Sie nicht, dass UDP wie diese verwenden, können Sie haben:

  • aus, um Pakete

  • verlorene Pakete in cas Stau