2017-11-30 3 views
0

私のUDP Javaプログラムは、Casesから正しい文を返しません。 プログラムは4つの異なる質問に対して4つの異なる答えを返さなければなりません。 しかし、唯一私が受けた答えは、デフォルトの答えはサーバーが例の方法 に 『文』を渡そうとしたとき、私はいくつかの問題があると思い は私がコードで何かが足りないのですか?UDP Java、正しいケースの返答を返しません。

サーバクラス

package pac1; 

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

public class Server { 

    public static void main(String args[]) throws Exception{ 
     System.out.println("UDP Server: Started"); 
     DatagramSocket serverSocket =new DatagramSocket(9878); 
     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("UDP Server Received: "+sentence); 
      InetAddress IPAddress = receivePacket.getAddress(); 
      int port = receivePacket.getPort(); 
      String out; 
      out=getAnswer(sentence); 

      System.out.println(sentence); 
      sendData= out.getBytes(); 
      DatagramPacket sendPacket = new DatagramPacket(sendData, 
      sendData.length, IPAddress, port); 
      serverSocket.send(sendPacket); 
      System.out.println("UDP Server Sending to Client: "+out); 
      } 

     } 
    private static String getAnswer(String sentence) { 
     String out; 
     switch(sentence) { 
     case "A" : out = "65"; 
     break; 
     case "B" : out = "66"; 
     break; 
     case "C" : out = "67"; 
     break; 
     case "D" : out = "68"; 
     break; 

     default: out = "Answer not found"; 
     break; 

     } 
     return out; 
    } 
    } 
「が見つかりませんANSWER」であります

クライアントクラス

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

public class Client { 
    public static void main(String args[]) throws Exception{ 
     System.out.println("UDP Client: Started"); 

     String url = "rmi:///"; 
      System.out.println("Enter Question: "); 
      Scanner myinput = new Scanner(System.in); 
      String sentence = myinput.nextLine(); 

     DatagramSocket clientSocket =new DatagramSocket(); 
     InetAddress IPAddress = InetAddress.getByName("localhost"); 
     byte[] sendData = new byte[1024]; 
     byte[] receiveData = new byte[1024]; 
     sendData =sentence.getBytes(); 
     DatagramPacket sendPacket = new DatagramPacket(sendData, 
       sendData.length, IPAddress, 9878); 
     System.out.println("UDP Client: Sending "+ sentence); 
     clientSocket.send(sendPacket); 
     DatagramPacket receivePacket = new DatagramPacket(receiveData, 
       receiveData.length); 
     clientSocket.receive(receivePacket); 
     String modifiedSentence = new String(receivePacket.getData()); 
     System.out.println("UDP Client: Received From Server; "+ modifiedSentence); 
     clientSocket.close(); 
    } 


    } 

答えて

0

あなたがこの問題を抱えている理由は、あなたがあなたのサーバークラスの文字列を作成している途中にありそうです。あなたは、パケットのイニシアを持っている場合1024バイトのデータを受け取るためにlizedされ、その1024バイトの数を減らすと、残りの配列はゼロで埋められます。これにより、文字列の最後に空白が入ります。この問題の最も単純な解決策は、受信したデータをサーバー側の文字列に変換した後に、おそらく呼び出すことです。

sentence.trim(); 

+0

ありがとうございましたsentence = sentence.trim() – Tom

+0

より良いアプローチは、実際の長さ 'String sentence = new String(receivePacket.getData()、0、receivePacket.getLength());を使用することです。 –

関連する問題