我必须在服务器端通过套接字从服务器端向客户端发送字符串,我有以下代码
serverSocket=new ServerSocket(2004);
socket=serverSocket.accept();
System.out.println("request arrived");
this.outStream=new ObjectOutputStream(socket.getOutputStream());
outStream.flush();
this.inStream=new ObjectInputStream(socket.getInputStream());
//PoolTuningStrategy is an terface that is implemented by number of strategies
for ( PoolTuningStrategy st : this.strategies ) {
String name=st.getName();
System.out.println("inside Loop "+name);
outStream.writeObject(name);
outStream.flush();
}
outStream.writeObject("END NAMES...");
outStream.flush();
现在在服务器端,所有名称都正确地打印在控制台上。现在在客户端我有以下代码。
socket = new Socket("localhost", 2004);
System.out.println("Client starting");
this.outStream=new ObjectOutputStream(socket.getOutputStream());
outStream.flush();
this.inStream=new ObjectInputStream(socket.getInputStream());
do{
name=(String)this.inStream.readObject();
System.out.println(name);
}while(name.equals("END NAMES..."));
但是只有第一个字符串在客户端打印,而不是全部! Plz帮帮我
答案 0 :(得分:0)
你错过了!在while条件下的equals()测试前面。
没有歧义'这里。
答案 1 :(得分:0)
在服务器端,确保您正在呼叫outStream.close()
。你也错过了!
我建议您更改代码:
while( ! "END NAMES...".equals( (name=this.inStream.readObject())) ){
或者喜欢这个
while("END NAMES...".compareTo( (name=this.inStream.readObject())) != 0 ){
System.out.println(name);
}
为什么呢? 1)通过使用" END NAMES ..." .equals(...),您可以避免NullPointerException,并且您的代码可以优雅地处理它。 2)您避免使用ClassCastException。 3)如果您已经在流的末尾,则避免IOException。 4)它更精简的代码。
此外,如果您在流上调用close(),则可能没有必要调用flush()。它可以通过添加函数调用来增加额外的负担。请注意,我们没有使用C / C ++。当缓冲区已满并且流自动结束时(编辑:关闭它时),Java将刷新。