이 연습 프로그램의 목적은 클라이언트가 입력 및 입력 키를 통해 입력 한 메시지 문자열을 계속해서 보내고 콘솔에 출력하도록 허용하는 것입니다. 처음으로 Server.java의 String messageFromClient = in.readLine();
이 차단 된 것처럼 보입니다 (디버거가 나에게 나가는 것을 허용하지 않습니다). 그러나 "hello"와 같은 메시지를 보낸 후에는 더 이상 차단하지 않고 계속 실행됩니다.루프는 첫 번째 루프에서만 멈추고 무기한으로 계속 실행됩니다.
나는 이것을 두어 동안 조사해 왔지만 나는 해결책을 찾기에 적당한 장소를보고 있지 않을 것이라고 생각한다.
이 링크 Java InputStream blocking read은 내가 아마 도움이 될 수있는 가장 가까운 것입니다.
Client.java
import java.io.*;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.*;
import java.net.InetAddress;
import java.util.Scanner;
public class Client {
static Socket connectionToServer;
public static void main(String[] args) {
try{
connectionToServer = new Socket("192.168.1.66", 6969);
InetAddress inetAddress = connectionToServer.getInetAddress();
System.out.print(
"Connection successful" +
"Connected to " + inetAddress.getHostAddress() +
"at " + inetAddress.getHostName() + "\n"
);
while(true) {
String input = System.console().readLine();
OutputStreamWriter dOut = new OutputStreamWriter(connectionToServer.getOutputStream());
dOut.write(input, 0, input.length());
//dOut.flush();
dOut.close();
}
} catch (IOException exception){
System.out.print("Failed to create socket");
}
}
}
Server.java
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
ServerSocket serverSocket;
try {
serverSocket = new ServerSocket(6969);
System.out.print("Server is up and running \n");
} catch (IOException exception){
serverSocket = null;
System.out.print("Cannot create ServerSocket");
}
while (true){
try {
System.out.print("Waiting from client.");
Socket socket = serverSocket.accept();
Thread newClientSocket = new Thread(new ServerThread(socket));
newClientSocket.start();
System.out.print("New thread created");
} catch (IOException exception){
System.out.print("Failed to create socket");
}
}
}
}
////////////////////////////////////////////////////////////
class ServerThread implements Runnable{
private Socket socket;
//constructor
ServerThread(Socket socket){
System.out.print("I am a new thread");
this.socket = socket;
}
public void run(){
while(true){
try{
System.out.print("Waiting for input.");
InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream());
BufferedReader in = new BufferedReader(inputStreamReader);
String messageFromClient = in.readLine();
System.out.print(messageFromClient);
} catch (IOException exception) {
System.out.print(exception);
break;
}
}
}
}