JavaのTCPソケット通信プログラムについて
初めてJavaでTCPソケット通信を書いてみたのですが、質問です。ソケット通信をサーバーとクライアント側で確立した後、メッセージの送受信をやるとても簡素なプログラムを作成しました。一回目の送受信をするだけだと上手くいくのですが、同じコネクション内で二回目の送受信をするよう追記したところ動作がおかしくなりました。(一つ目のメッセージも受信しないまま画面が停止した状態になる)何が問題なのでしょうか。
(Receiver.java)
public class Receiver {
public static final int PORT = 30000;
public static void main(String[] args) {
try {
ServerSocket serverSoc = new ServerSocket(PORT);
Socket socket = null;
System.out.println("Waiting for Connection..");
socket = serverSoc.accept();
System.out.println("Connection from "+socket.getInetAddress());
// receive message
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("Message from sender ="+new String(br.readLine()));
//send message←ここを追記するとおかしくなりました。
String message = "Hey This is receiver";
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
System.out.println("I will send: "+message);
bw.write(message);
br.close();
bw.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
(Sender.java)
public class Sender {
public static final int PORT = 30000;
public static void main(String[] args) {
try {
InetAddress LocalHost = InetAddress.getLocalHost();
InetSocketAddress socketAddress = new InetSocketAddress(LocalHost, PORT);
Socket socket = new Socket();
socket.connect(socketAddress, 10000);
//send message
String message = "Hey This is sender";
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
System.out.println("I will send: "+message);
bw.write(message);
// receive message←同じくここを追記するとおかしくなりました。
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("Message from receiver ="+new String(br.readLine()));
br.close();
bw.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}