クライアントがサーバーに文字列を送り、サーバーが逆の文字列で応答する単純で基本的なJavaプログラムを作成しようとしています。私は正しいプログラム構造とフローを持っていると確信していますが、私のサーバはクライアントから文字列を読み込まない。私はサーバー側でこの行に問題を絞り込んだ:string = inputStream.readLine();
ここに私のコードです。何が問題なの?ソケットを使用したJavaでのクライアント - サーバー通信
Server1.java
import java.io.*;
import java.net.*;
class Server1 {
public static void main(String[] args) throws Exception {
String string = null;
ServerSocket myServerSocket = new ServerSocket(4000); //Create Socket
System.out.println("Server Running...");
Socket clientSocket = myServerSocket.accept();
DataInputStream inputStream = new DataInputStream(clientSocket.getInputStream());
PrintStream outputStream = new PrintStream(clientSocket.getOutputStream());
do {
string = inputStream.readLine();
if(string!=null){
//using StringBuilder method to reverse string
StringBuilder input = new StringBuilder();
// append a string into StringBuilder input1
input.append(input);
// reverse StringBuilder input1
input = input.reverse();
// print reversed String
for (int i = 0; i < input.length(); i++) {
outputStream.println(input.charAt(i));
}
}
} while (true);
/*outputStream.println("exit");
outputStream.close();
inputStream.close();
myServerSocket.close();
System.out.println("Server Closed!");*/
}
}
Client1.java
import java.io.*;
import java.net.*;
import java.util.Scanner;
class Client1 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in); //Object to read keyboard input
String string = null, response = null; //Variable to store string
Socket mySocket = new Socket("127.0.0.1", 4000); //Create Socket
DataOutputStream outputStream = new DataOutputStream(mySocket.getOutputStream());
DataInputStream inputStream = new DataInputStream(mySocket.getInputStream());
System.out.println("Client Running...");
do {
System.out.println("Type in a string and Press Enter...");
string = sc.next();
outputStream.writeBytes(string);
response = inputStream.readLine();
if (response != null) {
System.out.println("Server Response: " + response);
}
} while (true);
}
}
は、コードを試していないが、 '' 'Scanner.next'''は何で改行を入れませんストリングの終わりであるため、サーバーは改行を無期限に待つことになります。コードの残りが大丈夫なら '' '\ n''や' '\ n''の組み合わせを送信してください。注意: '' 'Scanner.next'''はトークンを提供し、' 'Scanner.nextLine'''は行全体を提供します(まだ改行なし)。サイドノート2:より速い操作のために、書き込み後に出力ストリームを「フラッシュ」したいかもしれません。 – tevemadar