• ベストアンサー

javaの課題プログラムでどうしてもわかりません。

以下(senderTest)のプログラムを適切に繰り返すように書き換えたいのですが、どうしてもうまくいきません。while文で自分なりに繰り返した結果は同じ文字を送り続けるというものになってしまいました。 本来は送信して、待機状態になりまた新たに文字を入力したら送信、また待機というようにしたいのですがどうしたらよいでしょうか? どうかよろしくおねがいします。 ******************************** senderTest import java.io.*; import java.net.*; public class senderTest { private InetAddress address; private int port = 13400; private DatagramSocket socket; public senderTest() throws Exception { this.address = InetAddress.getByName("192.168.0.16"); this.socket = new DatagramSocket(); } public void send(String s) throws Exception { byte buffer[]; buffer = s.getBytes("Shift_JIS"); DatagramPacket packet = new DatagramPacket(buffer, buffer.length, this.address, this.port); this.socket.send(packet); } public static void main(String[] args)throws IOException { senderTest sender1; System.out.println("↓送信する文字を入力してください↓"); String name = ("健児>"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String msg = name +br.readLine(); try { sender1 = new senderTest(); sender1.send(msg); System.out.println("『" + msg + "』を送信しました。"); } catch (Exception ex) { System.err.println("Error: " + ex.getMessage()); } } } ********************************

質問者が選んだベストアンサー

  • ベストアンサー
noname#119918
noname#119918
回答No.3

入力文字列を繰り返しUDP送信するプログラムということですが、 このようなプログラムでどうでしょう。 import java.net.InetAddress; import java.net.DatagramSocket; import java.net.DatagramPacket; import java.io.BufferedReader; import java.io.InputStreamReader; class Sender { private InetAddress peeraddr; private final int peerport = 60000; private DatagramSocket sock; public Sender() throws Exception { peeraddr = InetAddress.getByName("localhost"); sock = new DatagramSocket(); } /*文字列を1回送信*/ public void send(String msg) throws Exception { byte buffer [] = msg.getBytes(); DatagramPacket packet = new DatagramPacket(buffer , 0 , buffer.length , peeraddr , peerport); sock.send(packet); } /*入力文字列を繰り返し送信*/ public void repeat_send() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true) { String msg = br.readLine(); this.send(msg); if(msg.equals("exit")) break; } } public void close() throws Exception { sock.close(); sock = null; } } public class SenderTest { public static void main(String [] args) throws Exception { Sender s = new Sender(); s.repeat_send(); s.close(); } }

ken0129012
質問者

お礼

うまくいきました!!!!ありがとうございます☆

その他の回答 (2)

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.2

> その場合どこをどのように変更すればよろしいのでしょうか? ちょっと時間がないので、擬似コードから類推してください: /*擬似コード*/ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); SenderTest sender1 = new SenderTest(); String msg; while (true){  msg = name +br.readLine();  DatagramPacket packet = sender1.send(msg); // packetを返す仕様にする  socket.receive(packet);  showServerMessage(packet); // 自作の新メソッド }

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

whileループの中で、name +br.readLine(); -> socket.send(packet);したら、次にreceive(packet);があれば、いいんじゃないですか?。UDPの場合、クライアントの標準的な実装はそうしますね。

ken0129012
質問者

補足

知識不足で申し訳ありません。その場合どこをどのように変更すればよろしいのでしょうか?

関連するQ&A

専門家に質問してみよう