14歳の自分に衝撃の事実を告げてください

以下(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());
}
}
}



********************************

A 回答 (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();
}
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/06 23:50

> その場合どこをどのように変更すればよろしいのでしょうか?


ちょっと時間がないので、擬似コードから類推してください:
/*擬似コード*/
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); // 自作の新メソッド
}
    • good
    • 0

whileループの中で、name +br.readLine(); -> socket.send(packet);したら、次にreceive(packet);があれば、いいんじゃないですか?。

UDPの場合、クライアントの標準的な実装はそうしますね。

この回答への補足

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

補足日時:2008/02/04 14:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報