要把 in.readLine(); 写在循环里面
否则一旦 读不到东西 就跳出了循环 程序就结束了
而不是什么 阻塞while(true){
line = in.readLine();
str = str + line + "\n";
System.out.println(line); System.out.println(""+str);
out.write(str);
out.flush();
}之后你就要重新选择条件跳出循环 比如接收到 特殊字符 如 Bye 等
否则一旦 读不到东西 就跳出了循环 程序就结束了
而不是什么 阻塞while(true){
line = in.readLine();
str = str + line + "\n";
System.out.println(line); System.out.println(""+str);
out.write(str);
out.flush();
}之后你就要重新选择条件跳出循环 比如接收到 特殊字符 如 Bye 等
解决方案 »
- ArrayList索引的起始位置是0还是1?
- mfc 同一个对话框内, 编辑框 不响应 按钮的文本输入消息
- Swing 中如何取得任务栏的高度?
- Swing怎么使控件的大小随着窗体的大小而改变
- 2的n次方小程序,郁闷~~
- <html:file 的readonly 问题
- 请教:e.printStackTrace()是什么作用?
- 关于GBK编码表的问题
- 写入Access2000出现No ResultSet was produced错误,但数据已经写入,部分语句如下:
- JBuilder里有没有象VC里,分DEBUG和Release牌呢?
- ?那位大哥,大姐有JBuilder8的盗版序列号,给我一个谢谢!!!
- Vector类的问题 2
server:
in = ....
out = ....
client:
out = ....
in = ....
没有理由的,java的bug吧,不然,有的时候工作,有的时候就会死掉。
首先,发送自己的消息,
服务器验证后,发回确认的消息。
然后才启动线程。
to telenths(_非法操作_) :
你那样做好像不行哦。他也是停在in.readline()上,
而且也不是我需要的那种效果。
server
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
client
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));这可不是法x功,我又一次也是调试了很久,最后把顺序改了一下就可以了其次,我想你建立连接应该还是有后续通讯的吧~~就是说,在启动你所谓的线程后应该还是保持连接的,如果是这样的话,应该把read写在线程里
while(aliveFlag){
read();
}
而写(write)就只是要写的时候在调用的~~~~你试试看
如果只是告诉服务器要做什么,而不用等待其结果的话,怎么不用rmi??
非阻塞i/o包。不过好想和你这个没有什么关系~~`
out.write("kaksdf\nkklasdf\n");
这句话之后 server 就接受不到任何 请求了
line = in.readLine() 始终为 null
你还想让他怎么走呢?
换了也没有效果。
这就像一个login过程,server读取后
to:telenths(_非法操作_)
如果
ling = null那就应该跳出循环啊!!本来认为in.readLine()是因为没有读满一行,它就阻塞,直至socket为其填满一行
后将其唤醒,但是如果Client去掉接收那断,Server去掉回复那断,
server就可以收到client发送的数据
换了也没有效果。
这就像一个login过程,server读取后判断是否接收这个Socket,如果不是它需要的将不和其继续通信,直接关闭客户Socket,否则才启动线程,接收通信信息。
out.write("kaksdf\nkklasdf\n");
out.flush();
out.close();
你不关闭的话是不会把数据传出去的!
in.readLine() 只有在读到数据后才会继续往下走
读不到数据 他就会等待所以造成了 阻塞的现象
有什么好的方法??
谁能给出方法,将单独再得100分!!
时间一到会报出一个TIMEOUT异常
socket.setSoTimeout(1000); try {
sCurrentLine = in.readLine();
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}