こんにちは、stackoverflowコミュニティ、Javaサーバークライアント通信が固まっているようです
Javaでのソケット通信に関する問題が発生しました。ここで
は私のサーバーとクライアントクラスのサンプルコードです:
サーバー:
public class OTPServer {
static ServerSocket serverSocket;
final static int PORT = 4242;
static Socket clientConnection;
public static void main(String[] args) {
try {
serverSocket = new ServerSocket(PORT);
System.out.println("Socket initialized");
String serverMessage = "Hello, I am the Host";
ServerTool serverTool = new ServerTool();
while (true) {
clientConnection = serverSocket.accept();
if(clientConnection.isConnected()) {
System.out.println("Client connected");
}
BufferedReader clientInputReader = new BufferedReader(new InputStreamReader(clientConnection.getInputStream()));
DataOutputStream serverOutput = new DataOutputStream(clientConnection.getOutputStream());
System.out.println("Sending message to client: " + serverMessage);
serverOutput.writeBytes(serverTool.encodeMessage(serverMessage));
serverOutput.flush();
String clientMessage = clientInputReader.readLine();
System.out.println("Encoded answer from client: " + clientMessage);
String decodedMessage = serverTool.decodeMessage(clientMessage);
System.out.println("Decoded answer from client: " + decodedMessage);
serverOutput.close();
clientInputReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Hello, I am the OTP Server!");
}
ここでは、クライアントである:
public class OTPClient {
static Socket clientSocket;
final static int PORT = 4242;
final static String HOST = "localhost";
public static void main(String[] args) {
System.out.println("I am the OTP Client!");
String serverMessage;
String clientResponse = "I am the Client";
OTPTool otpTool = new OTPTool();
try {
clientSocket = new Socket(HOST, PORT);
BufferedReader serverInput = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
DataOutputStream outputStream = new DataOutputStream(clientSocket.getOutputStream());
System.out.println("Connection to Host established");
serverMessage = serverInput.readLine();
System.out.println("Encoded Message from Server: " + serverMessage);
String decodedMessage = otpTool.decodeMessage(serverMessage);
System.out.println("Decoded message from Server: " + decodedMessage);
System.out.println("Answering with own message: " + clientResponse);
outputStream.writeBytes(clientResponse);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
は今どこに私の問題は、次のとおりです。
接続が確立され、サーバーはクライアントにメッセージを送信しているように見えます。答え。クライアントは、サーバーから取得したメッセージを印刷しません。 サーバーをキャンセルするとすぐに、クライアントはサーバーから取得したメッセージと情報を出力します。応答は送信終了コード0で終了しますので、この部分は何とか止まっているようです。 与えられたサンプルコードで見てきたように、すでにoutputStreamをフラッシュしようとしました。
何か不明な点がありますか? これは本当に基本的なものですが、通信用にソケットを初めて使用したことがあります。
ありがとうございます!
よろしく、 ロニー
はところで:私は、サーバーのみの接続を要求して一つのクライアントに接続されていることを知っています。それは私の使用には絶対に十分です。
デッドロック/並行性の問題です。これらのクラスをそれぞれどのような順序で実行しますか? – vontell
あなたはreadLineを呼び出しています。あなたの 'serverTool.encodeMessage'はメッセージの最後に改行を含んでいますか? –
@BrettOkken現時点では、 'serverTool.encodeMessage'はパラメータ文字列を返します。 @vontellまずサーバとクライアントを起動します。サーバはクライアントが接続するのを待っているので問題はありません。 – LongRon