[英]How to read input from a socket using threads JAVA
我正在編寫一個使用服務器和一個客戶端的簡單套接字編程應用程序。 我試圖啟動一個線程(從客戶端文件),該線程從套接字輸入流中讀取輸入,以便我可以將消息寫入服務器,然后將它們讀回並同時將它們打印到屏幕上。 但是,當我運行代碼時,我的代碼卡在了
message = in.readLine();
在InputReader.java file
並且不讀取任何輸入?
我的代碼如下,請幫忙。
SimpleServer1.java
public class SimpleServer1 {
public static void main(String args[]){
int portNumber = Integer.parseInt(args[0]);
ServerSocket serverSocket = null;
Socket clientConnection = null;
try{
//setup sockets
serverSocket = new ServerSocket(portNumber);
clientConnection = serverSocket.accept();
System.out.println("Connected to" + clientConnection.getInetAddress());
//setup streams
BufferedReader in = new BufferedReader(new InputStreamReader(clientConnection.getInputStream()));
PrintWriter out = new PrintWriter(clientConnection.getOutputStream());
out.flush();
//read input from stream
String message;
while((message = in.readLine()) != null){
//return message to client
out.println("Echo: " + message);
System.out.println(clientConnection.getInetAddress() + ": " + message);
if (message.equalsIgnoreCase("bye")){
System.out.println("Closing connection...");
break;
}
}
//close streams
out.close();
in.close();
clientConnection.close();
}catch(Exception e){
e.printStackTrace();
}
}
SimpleClient1.java
public class SimpleClient1{
public static void main(String args[]){
String hostName = (args[0]);
int portNumber = Integer.parseInt(args[1]);
try{
Socket serverConnection = new Socket(hostName, portNumber);
PrintWriter out = new PrintWriter(serverConnection.getOutputStream(), true);
out.flush();
Thread listener = new Thread(new InputReader(serverConnection));
listener.start();
Scanner keyboard = new Scanner(System.in);
String userInput;
while((userInput = keyboard.nextLine()) != null){
out.println(userInput);
if (userInput.equalsIgnoreCase("bye")){
break;
}
}
//closing streams
out.close();
serverConnection.close();
}catch(Exception e){
e.printStackTrace();
}
}
InputReader.java <-我試圖用什么來運行我的線程
public class InputReader implements Runnable{
private Socket serverConnection;
private BufferedReader in;
public InputReader(Socket socket){
serverConnection = socket;
try{
in = new BufferedReader(new InputStreamReader(serverConnection.getInputStream()));
}catch(IOException ioE){ioE.printStackTrace();}
}
@Override
public void run() {
try{
String message;
while(true){
System.out.println("done");
message = in.readLine();
System.out.println(message);
}
}catch(IOException ioE){ioE.printStackTrace();}
}
最終,我想使用線程從套接字流讀取和寫入。
提前致謝 :)
Cobezz
我相信您必須在寫入流后沖洗掉正在寫入的流。 您似乎在創建流后就立即對其進行刷新,這不會產生任何效果。
在SimpleServer1.java中,您必須添加out.flush();。
while(((消息= in.readLine())!= null){
out.println(“ Echo:” +消息);
了out.flush();
System.out.println(clientConnection.getInetAddress()+“:” +消息);
如果(message.equalsIgnoreCase(“ bye”)){
System.out.println(“正在關閉連接...”);
打破;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.