下面是我写的一个socket客户端程序,它要接收键盘和 服务端的信息。原来的服务器端采用echo方式,没有发现问题。
当服务器端采用多线程之后,问题出来了。双接收端形成双等待。
比如:如果服务器不断地发信息过来,用户端要是没有输入,客户端就一直等待输入。怎么解决这个问题?
我发现telnet没有这个问题。它是怎么实现的呢?import java.net.*;
import java.io.*;public class Client {
static Socket server; public static void main(String[] args) throws Exception { if (args.length != 2) {
System.out.println("USAGE: java Client servername  port");
return;
} server = new Socket(InetAddress.getByName(args[0]),Integer.parseInt(args[1]));
BufferedReader in = new BufferedReader(new InputStreamReader(server
.getInputStream()));
PrintWriter out = new PrintWriter(server.getOutputStream());
BufferedReader stdIn = new BufferedReader(new InputStreamReader(
System.in));
System.out.println("结束方式:输入bye"); while (true) {
String str = stdIn.readLine();// from keyboard
out.println(str);
out.flush();// to server
if (str.equals("bye")) {
break;
}
System.out.println(in.readLine());// from server
// to display
}
server.close();
}
}