2017-09-04 2 views
0

クライアントコンピュータの完全なシステム情報をサーバーコンピュータに送信するJavaアプリケーションを作成します。以下のプログラムでは、私はタスクを達成することができますが、空白に遭遇するとメッセージが分割されます。分割メソッドを削除しようとしましたが、機能しません。クライアントシステムのプロパティをJavaのサーバーコンピュータに送信する方法は?

クライアントは、整形された行形式でサーバーに情報を送信する必要があります。

P.S-私はYoutubeビデオチュートリアルを参照していました。

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

のCASで

  • 失われたパケット別のものに分割する。たとえば "<+>"というトークンであることが保証されているものを作ってください。そのようなことが起きる可能性はごくわずかです。 – Stultuske

  • +0

    分割ループ外で受信を移動する必要があります。 – EJP

    +1

    Never Write catch(Exception e){}常に例外を処理するpoperbly – Jens

    答えて

    0

    あなたが各スペースで複数のパケットにspliting避けたい場合は、いくつかの領域に遭遇したときのパケットに分割ループを削除します。

    ので交換してください:

    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++; 
        } 
    } 
    

    によって:

    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); 
    

    もう1つの方法は、行末で分割することです。

    このようにUDPを使用して、あなたが持っていることを忘れないでください:オーダーパケットのうち

    • あなたが試みることができる混雑

    関連する問題