首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于java tcp的有关问题

2012-04-21 
关于java tcp的问题首先说下我程序的基本实现及问题所在:两个图形界面(Server和Client,Client有两个按钮“

关于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()函数是非阻塞的?

热点排行