2017-03-19 4 views
0

私はEchoサーバクライアントUDPアプリケーションを作成しようとしています。クライアントは20以上の番号を送信するはずで、サーバーはそれらを返信します。しかし、私が持っているものから、それはStringからのfirst characterだけが送信されていることを示しています。私は教授に助けを求めましたが、それも分かりませんでした。いくつかの助けがいいだろう。ありがとうございました!Javaの最初の文字を表示するUDPデータグラム

Client.java:

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

public class client { 
    public static void main(String[] args) { 
     DatagramSocket socket; 
     try { 
      socket = new DatagramSocket(); 
      InetAddress address = InetAddress.getByName("localhost"); 
      byte[] buf = new byte[256]; 
      for (Integer i = 1; i < 21; i++) { 
       buf = i.toString().getBytes(); 
       DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 4445); 
       socket.send(packet); 
       packet = new DatagramPacket(buf, buf.length); 
       socket.receive(packet); 
       String received = new String(packet.getData(), 0, packet.getLength()); 
       System.out.println("Server: " + received); 
      } 
      socket.close(); 
     } catch (SocketException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
} 

Server.java:

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

public class server { 
    public static void main(String argsp[]) { 
     DatagramSocket socket; 
     try { 
      socket = new DatagramSocket(4445); 
      byte[] buf = new byte[256]; 
      DatagramPacket packet = new DatagramPacket(buf, buf.length); 
      while (true) { 
       socket.receive(packet); 
       String message = new String(packet.getData(), 0, packet.getLength()); 
       System.out.println("Client: " + message); 
       buf = message.getBytes(); 
       InetAddress address = packet.getAddress(); 
       int port = packet.getPort(); 
       packet = new DatagramPacket(buf, buf.length, address, port); 
       socket.send(packet); 
      } 
     } catch (SocketException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

クライアント出力:

Server: 1 
Server: 2 
Server: 3 
Server: 4 
Server: 5 
Server: 6 
Server: 7 
Server: 8 
Server: 9 
Server: 1 
Server: 1 
Server: 1 
Server: 1 
Server: 1 
Server: 1 
Server: 1 
Server: 1 
Server: 1 
Server: 1 
Server: 2 

サーバー出力:

Client: 1 
Client: 2 
Client: 3 
Client: 4 
Client: 5 
Client: 6 
Client: 7 
Client: 8 
Client: 9 
Client: 1 
Client: 1 
Client: 1 
Client: 1 
Client: 1 
Client: 1 
Client: 1 
Client: 1 
Client: 1 
Client: 1 
Client: 2 

答えて

1

データグラムを受信するたびに、DatagramPacketはその長さに縮小されます。したがって、サーバーでは、最初の受信後に1に縮小されます。受信lopo内で再作成するか、ループの最上部で長さをリセットする必要があります。

+0

私はそれを知らなかった。私がループに入る前に 'buf'と' DatagramPacket'を定義すると、全体を通して同じように留まると思いました。ご協力ありがとうございました! – Ccyan

関連する問題