关于服务器客户端之间的 while((str=br.readline())!=null){//输出readline}问题
while((str=br.readline())!=null){//输出readline,输出“测试成功”}貌似这句话在单方读取数据时可以的,即当readline到了流...
while((str=br.readline())!=null){//输出readline,输出“测试成功”} 貌似这句话在单方读取数据时可以的,即当readline到了流结尾时(readline取到null时),自动会结束while循环;而在服务器与客户端相互读取数据时,当readline到流结尾时,照理说readline==Null了,应该结束while循环了,但是程序会一直卡在readline()那里,感觉一直取不到null,但是又不会输出大括号里的“测试成功”
我先前貌似也看到过,据说在服务器与客户端之间用readline时,readline就一直不会取到null,即使读到了流结尾。有没有好的解决办法,难道这个readline()不能解决这方面的问题啊?
求高人指教,求指导
这里大小写暂时忽略,我手写错了 编译器里没写错,因为编译通过了 展开
我先前貌似也看到过,据说在服务器与客户端之间用readline时,readline就一直不会取到null,即使读到了流结尾。有没有好的解决办法,难道这个readline()不能解决这方面的问题啊?
求高人指教,求指导
这里大小写暂时忽略,我手写错了 编译器里没写错,因为编译通过了 展开
4个回答
展开全部
约定用某个字符串(如"bye")表示流结束
即while(!(str=br.readLine()).equals("bye")){...}
即while(!(str=br.readLine()).equals("bye")){...}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1。约定用某个字符串(如"bye")表示流结束的确是个办法
2。之所以出现这种情况,是因为你用的是阻塞式IO,你 可以采用非阻塞式IO
给你一个约定用某个字符串表示流结束的例子
import java.net.*;
import java.io.*;
public class TalkClient {
Socket so = null;
BufferedReader br = null;
BufferedReader bdr = null;
PrintWriter pw = null;
String s = null;
String str = null;
boolean flag = false;
public TalkClient(){
try {
so = new Socket("127.0.0.1", 38888);
}catch(UnknownHostException e){
System.out.println("如果无法确定指定主机的 IP 地址");
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
new TalkClient().request();
}
public void request(){
try {
pw = new PrintWriter(so.getOutputStream(), true);
br = new BufferedReader(new InputStreamReader(so.getInputStream()));
bdr = new BufferedReader(new InputStreamReader(System.in));
} catch (IOException e) {
e.printStackTrace();
}
communicate();
}
public void communicate(){
try {
while(!flag){
str = bdr.readLine();
pw.println(str);
s = br.readLine();
System.out.println("Server:" + s);
if(str.equals("Good bye")){
flag = true;
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(so != null){
so.close();
}
if(pw != null){
pw.close();
}
if(br != null){
br.close();
}
if(bdr != null){
bdr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2。之所以出现这种情况,是因为你用的是阻塞式IO,你 可以采用非阻塞式IO
给你一个约定用某个字符串表示流结束的例子
import java.net.*;
import java.io.*;
public class TalkClient {
Socket so = null;
BufferedReader br = null;
BufferedReader bdr = null;
PrintWriter pw = null;
String s = null;
String str = null;
boolean flag = false;
public TalkClient(){
try {
so = new Socket("127.0.0.1", 38888);
}catch(UnknownHostException e){
System.out.println("如果无法确定指定主机的 IP 地址");
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
new TalkClient().request();
}
public void request(){
try {
pw = new PrintWriter(so.getOutputStream(), true);
br = new BufferedReader(new InputStreamReader(so.getInputStream()));
bdr = new BufferedReader(new InputStreamReader(System.in));
} catch (IOException e) {
e.printStackTrace();
}
communicate();
}
public void communicate(){
try {
while(!flag){
str = bdr.readLine();
pw.println(str);
s = br.readLine();
System.out.println("Server:" + s);
if(str.equals("Good bye")){
flag = true;
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(so != null){
so.close();
}
if(pw != null){
pw.close();
}
if(br != null){
br.close();
}
if(bdr != null){
bdr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while ((line = br.readLine()) != null&&line.length()!=0) {
System.out.println(line);
}
System.out.println(line);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询