我正在构建连接到服务器并发送消息的客户端。我有这个部分,服务器正在收到消息,但我的问题是让我的客户端监听来自服务器的消息。本质上,它就像一个聊天室,我必须将消息发送到服务器,而我的客户端也需要从服务器接收消息,并在服务器发送消息时将其打印出来。使用线程和套接字获取服务器响应
我没有构建服务器,也没有访问服务器代码,但我确实知道服务器的工作原理。下面是我的客户端,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();
}
}
}
它看起来像两个线程工作..我只是无法得到积极 –
两个线程都在哪里或不每个线程成为卡住时? – acelent
阅读关于套接字和线程http://www.oracle.com/technetwork/java/socket-140484.html#multi –