2017-06-19 12 views
-1

私はある機能を有する小型のデモを作成します「AA」と「BB」:2つの文が 私は例えばUDPClientからUDPServer
には、2つの文を渡すときに問題が、ある
+バックUDPClient

にこれら二つの大文字の文を渡す大文字されます。ですから、UDPServerでは "aa"と "bb"を正確に得ることができます。しかし、UDPServerからUDPClientへの "AA"と "BB"という大文字の文章を返すと、 "AA"しか得られません。処理後にUDPClientで「AA」と「BB」の両方を正確に取得するにはどうすればよいですか?
UDPクライアント::
Javaで複数のUDPデータグラムパケットを受信する方法は? <br> +ユーザ入力された2文:sentenceAとsentenceB <br> + <br><br> をUDPServerに渡すよりも、 - UDPServerで:<br> +もの - UDPClientで<br> :

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 
import java.net.SocketException; 
import java.net.UnknownHostException; 
import java.nio.ByteBuffer; 

public class UDPClient extends Thread { 

static int port = 1234; 

public UDPClient() { 

} 

@Override 
public void run() { 
    super.run(); 
    while (true) { 
     try { 
      DatagramSocket clientSocket = new DatagramSocket(5678); 
      BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); 
      InetAddress IPAddress = InetAddress.getByName("localhost"); 

      byte[] sendData = new byte[1024]; 
      byte[] sendData1 = new byte[1024]; 

      byte[] receiveData = new byte[1024]; 

      System.out.println("\nInput sentenceA : "); 
      String sentence = inFromUser.readLine(); 
      System.out.println("Input sentenceB : "); 
      String sentence1 = inFromUser.readLine(); 
      sendData = sentence.getBytes(); 
      sendData1 = sentence1.getBytes(); 

      DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 1234); 
      clientSocket.send(sendPacket); 
      DatagramPacket sendPacket1 = new DatagramPacket(sendData1, sendData1.length, IPAddress, 1234); 
      clientSocket.send(sendPacket1); 

      DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
      clientSocket.receive(receivePacket); 
      String modifiedSentenceA = new String(receivePacket.getData()); 
      String modifiedSentenceB = new String(receivePacket.getData()); 
      System.out.println("FROM SERVER : " + " sentenceA : " + modifiedSentenceA + ", sentenceB : " + modifiedSentenceB); 

      clientSocket.close(); 
     } catch (SocketException ex) { 
      System.out.println(ex);; 
     } catch (UnknownHostException ex) { 
      System.out.println(ex);; 
     } catch (IOException ex) { 
      System.out.println(ex); 
     } 
    } 
} 

public static void main(String[] args) throws SocketException { 
    Thread t = new UDPClient(); 
    t.start(); 
} 
} 

UDPServer:あなたのクライアントが一つだけ実行されている

import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 
import java.net.SocketException; 


public class UDPServer extends Thread{ 


public UDPServer(){ 

} 

@Override 
public void run() { 
    super.run(); //To change body of generated methods, choose Tools | Templates. 
     try { 
     DatagramSocket serverSocket = new DatagramSocket(1234); 

     byte[] receiveData = new byte[1024]; 

     byte[] sendData = new byte[1024]; 
     byte[] sendData1 = new byte[1024]; 
     while(true){ 
      DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
      serverSocket.receive(receivePacket); 
      String sentence = new String(receivePacket.getData()); 
      String sentence1 = new String(receivePacket.getData()); 
      System.out.println("RECEIVED " + sentence + " sentence1 : " + sentence1); 

      InetAddress IPAddress = receivePacket.getAddress(); 
      int port = receivePacket.getPort(); 

      String capitalizedSentence = sentence.toUpperCase(); 
      String b = sentence1.toUpperCase(); 

      sendData = capitalizedSentence.getBytes(); 
      sendData1 = b.getBytes(); 

      DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); 
      serverSocket.send(sendPacket); 
      DatagramPacket sendPacket1 = new DatagramPacket(sendData1, sendData1.length, IPAddress, port); 
      serverSocket.send(sendPacket1); 


     } 
    } catch (SocketException ex) { 
     System.out.println(ex);; 
    } catch (IOException ex) { 
     System.out.println(ex);; 
    } 

} 

public static void main(String[] args){ 
    Thread serverThead = new UDPServer(); 
    serverThead.start(); 
} 
} 

答えて

0
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
clientSocket.receive(receivePacket); 
String modifiedSentenceA = new String(receivePacket.getData()); 
String modifiedSentenceB = new String(receivePacket.getData()); 

が受け取る
は、ここに私のコードです。受信したパケットを2回印刷していますが、同じパケットです。

+0

クライアントで2つのパケットを宣言しようとすると、その2つのパケットからデータを取りますが、何も変わりません。 –

+0

いいえ、受信用に2つのパケットを宣言していません。 *送信された*受信されなかったパケットが2つあると宣言しており、送信したデータは送信しません。受信用に* one *パケットを宣言していて、それを一度*受信して2回印刷しています。 2枚のプリントの間に何が変わるのですか?自分のコードを理解しているようには見えません。 – EJP

関連する問題