如题,而且最后输入end结束的时候还要报Software caused connectionabort: socket write error这个错
代码如下
服务端代码
import java.io.*;   
import java.net.*;   
  
public class Server {   
public static void main(String[] args) throws IOException{   
ServerSocket server=new ServerSocket(5678);   
Socket client=server.accept();   
BufferedReader in=  
new BufferedReader(new InputStreamReader(client.getInputStream()));   
DataOutputStream out=new DataOutputStream(client.getOutputStream());
while(true){   
String str="Your input is:"+in.readLine();   
System.out.println(str);  if(str.equals("end"))  { 
break;   
}
    
byte[] b=str.getBytes();
out.write(b,0,b.length);   
out.flush();   
}
in.close();
out.close();
client.close();   
}   
}  客户端代码
import java.net.*;   
import java.io.*;   
  
public class Client{   
static Socket server;   
  
public static void main(String[] args)throws Exception{   
server=new Socket(InetAddress.getLocalHost(),5678);   
DataInputStream in = new  DataInputStream(server.getInputStream());
PrintWriter out=new PrintWriter(server.getOutputStream());   
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));   while(true){   
String str=wt.readLine();   
out.println(str);   
out.flush();   
if(str.equals("end")){   
break;   
}  
byte[]  b    = new byte[in.available()];
for(int i = 0;i < b.length;i++){ 
    b[i] = (byte)in.read(); 

String s = new String(b);
System.out.println(s);   
}   
in.close();
out.close();
wt.close();
server.close();   
}   
}   

解决方案 »

  1.   

    Server类while里面
    String str="Your input is:"+in.readLine();   
    System.out.println(str);  if(str.equals("end"))  { 
    break;   
    }
    这里永远不可能成立换成下面试试
    String str =   in.readLine();
    System.out.println( "Your input is:"+str);if (str.equals("end"))
    {
    break;
    }
      

  2.   

    按照上面的改了之后并没有问题
    第二次回车才看到第一次的内容的原因很简单,你是再发送完了之后读取服务器返回的东西,但是太快了,所以你发送完第一次的之后没等到服务端返回的了,你可以在客户端发送完之后让线程sleep一会儿,就会看到效果了,在if...break的后面加一句 
    Thread.currentThread().sleep(100);
      

  3.   

    那个异常不报了,但是Thread.currentThread().sleep(100);加了之后还是要下一次回车才返回现在输入的东西