私はクライアントのメッセージにエコーを返そうとしていますが、方法を理解していません。私のクライアントは、メッセージを送信し、その後私は論文を逆にして進行していないプログラムは、(ラインで=新しいDataOutputStreamを(clientSocket.getOutputStream())クライアントとサーバ間のメッセージ交換 - Javaのソケット
DataOutputStreamのを立ち往生、サーバーの
を)。私はそれが入力ストリームを閉じることだと思いますが、私がそれを行うとソケットが閉じてしまい、再利用する方法がありません。私はreadUTFとsocket.shutDownInputを使ってこれを行うことを管理していますが、私は一番簡単な方法を望んでいます。
クライアント
public class SocketClient {
public static void main(String[] args) throws IOException {
// Check arguments
if (args.length < 3) {
System.err.println("Argument(s) missing!");
System.err.printf("Usage: java %s host port file%n", SocketClient.class.getName());
return;
}
String host = args[0];
// Convert port from String to int
int port = Integer.parseInt(args[1]);
// Concatenate arguments using a string builder
StringBuilder sb = new StringBuilder();
for (int i = 2; i < args.length; i++) {
sb.append(args[i]);
if (i < args.length-1) {
sb.append(" ");
}
}
String text = sb.toString();
// Create client socket
Socket socket = new Socket(host, port);
System.out.printf("Connected to server %s on port %d %n", host, port);
// Create stream to send data to server
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
// Send text to server as bytes
out.writeBytes(text);
out.writeBytes("\n"); // devia meter readline a null...
System.out.println("Sent text: " + text);
System.out.println(socket.getInetAddress().getHostAddress() + " " + socket.getPort());
//out.close();
//socket.shutdownOutput(); trials...
////////////////////////////////////////////
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("here");
// Receive data until client closes the connection
String response;
while ((response = in.readLine()) != null)
System.out.printf("Received message with content: '%s'%n", response); // here is where client doesn't proceed - he doesn't get the echo
サーバー
public class SocketServer {
public static void main(String[] args) throws IOException {
// Check arguments
if (args.length < 1) {
System.err.println("Argument(s) missing!");
System.err.printf("Usage: java %s port%n", SocketServer.class.getName());
return;
}
// Convert port from String to int
int port = Integer.parseInt(args[0]);
// Create server socket
ServerSocket serverSocket = new ServerSocket(port);
System.out.printf("Server accepting connections on port %d %n", port);
// wait for and then accept client connection
// a socket is created to handle the created connection
Socket clientSocket = serverSocket.accept();
System.out.printf("Connected to client %s on port %d %n",
clientSocket.getInetAddress().getHostAddress(), clientSocket.getPort());
// Create stream to receive data from client
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
// Receive data until client closes the connection
String response;
while ((response = in.readLine()) != null)
System.out.printf("Received message with content: '%s'%n", response);
/////////////////////////////////////////////
DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream()); // he doesn't reach here
System.out.println("here-serv");
System.out.println(clientSocket.getInetAddress().getHostAddress() + " " + clientSocket.getPort());
// Send text to server as bytes
out.writeBytes("echo");
私は実際にサーバからのreadlineで何かを持っているこの問題は、それがnullを取得していないと考えている - しかし、クライアントが "\ n" を送信します!あなたは私のコードミスを見つけることができますか?おかげ
は私が多くを知っているscroll down toパソコンへ転送...あなたはリアルタイムのチャットサーバーを構築したい場合に備えてfirebaseクラウドメッセージングのために行くのはなぜですか? –
私はそれを構築したくない、これは単なる実験です。単純に両面を送受信しているだけです... – samthegolden
ソケットは閉じられ、出力ストリームは 'flush()'を使用する必要があります –