안녕하세요 stackoverflow 커뮤니티,자바 서버 클라이언트 통신이 멈춘 것 같습니다
자바 소켓 통신에 관한 문제가 생겼습니다. 여기
내 서버 및 클라이언트 클래스의 샘플 코드입니다 :서버 :
: 내 문제입니다 지금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();
}
}
: 여기
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!");
}
는 클라이언트입니다
연결이 설정되고 서버가 클라이언트에 메시지를 보내고 기다리는 것처럼 보입니다. 대답. 클라이언트는 서버에서받은 메시지를 인쇄하지 않습니다. 서버를 취소하자마자 클라이언트는 정보를 비롯하여 서버에서 가져온 메시지를 인쇄합니다. 응답은 종료 코드 0으로 종료됩니다. 따라서이 부분은 문제가없는 것으로 보입니다. 주어진 예제 코드에서 볼 수 있듯이 이미 outputStream을 플러시하려고했습니다.
실종 된 점이 있습니까? 알다시피, 이것은 정말로 기본적인 것들이지만 처음으로 소켓을 사용하여 통신합니다.
미리 감사드립니다.
최고 감사합니다 BTW, 로니
: 나는 서버는 연결을 요청하는 하나의 클라이언트에 연결하는 것을 알고있다. 그게 내 사용에 절대적으로 충분하다.
확실히 교착 상태/동시성 문제. 각 클래스를 어느 순서로 실행합니까? – vontell
당신은 readLine을 호출하고 있습니다. 'serverTool.encodeMessage' 메시지의 끝에 줄 바꿈을 포함합니까? –
@BrettOkken 현재'serverTool.encodeMessage'는 매개 변수 문자열 만 반환합니다. @vontell 처음에는 서버를 시작한 다음 서버가 클라이언트에서 연결을 기다리고있어 문제가없는 클라이언트를 시작합니다. – LongRon