下面是我写的一个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();
}
}
当服务器端采用多线程之后,问题出来了。双接收端形成双等待。
比如:如果服务器不断地发信息过来,用户端要是没有输入,客户端就一直等待输入。怎么解决这个问题?
我发现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();
}
}
解决方案 »
- 上传文件被过滤器拦截
- eclipse4.2创建JSF项目的问题
- 请教一些关于权限验证方面的好思路
- jquery的问题
- 怎样运行包中的servlet程序
- 关于通讯问题
- 获得一个InputStream,里面数据是xml,如何删除其中若干行数据呢?
- 加载XML出错 Exception caught while loading book.xml: [object Error]
- mybatis 执行SQL字符串(不是XML中的内容)
- 再次求助:请问上海哪的书便宜?
- 请教高手为什么我做struts2 spring hibernatte 整合出现了好多错误,请大家帮我看看啊
- could not initialize a collection: [com.db.tarena.crm.order.entity.Order.product#2]
怎样编写远程登录主机?要求使用telnet登录后,可以在服务器上执行dos命令,比如dir,md等等,同时看到系统提示信息。