日期:2014-05-20  浏览次数:20727 次

关于java tcp的问题
首先说下我程序的基本实现及问题所在:
两个图形界面(Server和Client,Client有两个按钮“链接”和“断开”)当Client“链接”时Server每隔五秒向Client发送系统时间信息。Client点击断开时,Client将字符“quit”传到服务器上,服务器接收到后将链接时长再发送给客户端,客户端显示出来。现在的问题是:服务器这边当客户端点击断开时接收到了“quit”,但是客户端却获取不了服务器发送的链接时长。代码如下希望那位大虾指点下:

客户端:
public void run(){ //线程正式"跑起来"
try{
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
out.write("quit"); //当点击断开触发器时,将字符"quit"发送给服务器
out.flush(); //刷新
System.out.println("断开成功!");
try{
System.out.println("这里应该有!");
if(in.ready()){
这里就输出不了了 System.out.println("有没有执行获取程序!");
String i=in.readLine();//将读取缓存的数据转化为字符串
p.setText(i); //将获得的in作为字符串打印在文本框内
System.out.println("断开显示的问题!");
}
}catch (Exception e) {
e.printStackTrace();
}
in.close(); //关闭in
out.close(); //关闭流out
s.close(); //关闭socket
}catch(Exception e){
e.printStackTrace();
}


服务器:服务器端都是可以输出的,应该没有任何问题!
while(true){
if(in.ready()){
System.out.println("接收quit的最开始!");
String strWord=in.readLine(); System.out.println("接收quit第二次!");
System.out.println(strWord);
if(strWord.equals("quit")){ /当捕获的字符串是"quit"时
long end = System.currentTimeMillis();//获取捕获"quit"数据时的时间
out.write("链接用时"+(end-start)+"毫秒"); //计算该客户链接的时间
System.out.println("链接用时"+(end-start)+"毫秒");
out.flush();
p.setText("客户端正常关闭!"); //打印客户的正常关闭
}

------解决方案--------------------
客户端这边,你有没有考虑过:
if(in.ready()){
这个返回false的话该怎么办?


你是否知道ready()函数是非阻塞的?