【发布时间】:2016-11-13 22:36:25
【问题描述】:
我正在构建一个连接到服务器并发送消息的客户端。我已经关闭了那部分,服务器正在获取消息,但我遇到的问题是让我的客户端监听来自服务器的消息。从本质上讲,它就像一个聊天室,我必须在其中向服务器发送消息,而我的客户端还需要从服务器接收消息并在服务器发送消息时将它们打印出来。
我没有构建服务器,也没有访问服务器代码,但我知道服务器工作正常。下面是我为客户端提供的,SendThread 工作得很好,但是当我添加一个 GetThread 时,发送线程不再工作,所以我无法让 2 个线程工作,一个监听一个发送。
Client.java
public class Client {
public static void main(String[] args) throws IOException {
// String name = args[0];
String name = "Brandon";
Socket socket = new Socket("localhost", 4688);
Thread sendThread = new SendThread(socket, name);
Thread getThread = new GetThread(socket);
sendThread.start();
getThread.start();
}
}
SendThread.java
public class SendThread extends Thread {
Socket socket;
String name;
SendThread(Socket s, String n) {
socket = s;
this.name = n;
}
public void run(){
try{
String message;
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
printWriter.println("connect Brandon");
BufferedReader bufferedReaderFromClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(bufferedReaderFromClient.readLine());
BufferedReader bufferedReader = new java.io.BufferedReader(new InputStreamReader(System.in));
while(true) {
String readerInput = bufferedReader.readLine();
printWriter.println(name + ": " + readerInput);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
GetThread.java
public class GetThread extends Thread {
Socket socket;
GetThread(Socket s) {
socket = s;
}
public void run(){
try{
String message;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while((message = bufferedReader.readLine()) != null) {
System.out.println("Incoming: " + message);
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
【问题讨论】:
-
看起来两个线程都可以工作.. 我只是无法让两个线程都处于活动状态
-
每个线程在何时何地被卡住?
标签: java multithreading sockets