我写了两个Socket程序,客户端代码是:
import java.net.*;
import java.io.*;
public class Cli { public static void main(String[] args) {
  try
  {
           Socket so=new Socket("127.0.0.1",3721);
           BufferedReader buf=new BufferedReader(new InputStreamReader(so.getInputStream()));
           PrintWriter buw=new PrintWriter(so.getOutputStream());
           buw.println("哈哈o(∩_∩)o...哈哈");
  }
  catch(Exception e)
  {}
  
 }}
服务器端代码是:
import java.io.*;
import java.net.*;
public class Cc 
{ public static void main(String[] args) 
 {
  try
                   {
                     ServerSocket server=new ServerSocket(3721);            
                     Socket s1=server.accept();            
                     BufferedReader buf=new BufferedReader(new InputStreamReader(s1.getInputStream()));
                     System.out.print("记号");
                     String s=buf.readLine();
                     System.out.print(s);
            
                     s1.close();
                      buf.close();
    }
    catch(Exception e)
                    {
                             System.out.print("出现异常");
   e.getMessage();
                    }
 }}我运行的时候服务器端会显示“记号出现异常”,我把System.out.print("记号");这一句写到String s=buf.readLine();之后,运行就只会显示出现异常,这是怎么一回事,有人说在客户端的 BufferedReader buf=new BufferedReader(new InputStreamReader(so.getInputStream()));  和服务器端的 BufferedReader buf=new BufferedReader(new InputStreamReader(s1.getInputStream()));
,同时在客户端和服务器端去获得输入流,这个时候就会发生阻塞。。
请大家帮帮忙

解决方案 »

  1.   

    同时去获取输入流并不会发生阻塞,
    你在这一句时:
        String s=buf.readLine();
    才发生阻塞的,因为readLine()这个方法是阻塞的
    还有,发生异常你直接捕获Exception而不打印异常信息,无法知道是什么异常,在哪发生的
    这样没办法解决啊
      

  2.   

    System.out.print(e.getMessage());它说异常是Connection reset
      

  3.   

    客户端加上
      so.close();
      

  4.   

    另外
    PrintWriter buw=new PrintWriter(so.getOutputStream());
    改成
    PrintWriter buw=new PrintWriter(so.getOutputStream(),true);
      具体的自己去看下PrintWrite的用法
      

  5.   

    加上下面这两行在buw.println("哈哈o(∩_∩)o...哈哈");之后
    buw.flush();
    so.close()
    异常的原因是服务器在等待客户端传送数据时,你的客户端异常退出