我觉得你不应该在客户端
dos.write(buffer, 0, i);后马上关闭连接,这样的话,有可能服务器端还没有收完数据,连接就中断了,因此产生异常。客户端可以连续发送数据,在没有数据后,在关闭连接。

解决方案 »

  1.   

    多谢,原先问题已解决,代码如下:
    package testserver;
    import java.net.*;
    import java.io.*;public class testclient {
      
      public static void main(String[] args) throws IOException{
        Socket asocket = null;
        int i;
        DataOutputStream dos = null;
        byte[] buffer;
        while(true){
           asocket = new Socket("127.0.0.1", 6666);
           dos = new DataOutputStream(asocket.getOutputStream());
           buffer = new byte[512];
           i = System.in.read(buffer);
           dos.write(buffer, 0, i);
           System.out.println(i);
           dos.close();
           asocket.close();
           }
        }
    }
    package testserver;
    import java.io.*;
    import java.net.*;public class testserver2 implements Runnable{
      Socket asocket = null;
      public testserver2(Socket asocket)
      {  this.asocket = asocket;
      }
      
      public void run() {
        DataInputStream dis = null;
        try {
            dis = new DataInputStream(asocket.getInputStream());
            int read;
            byte[] buffer;
            do {
              buffer = new byte[512];
              read = dis.read(buffer);
              if(read==-1) break;
              String s = new String(buffer,0,read);
              System.out.println(s);
            }
            while (read != -1);
            dis.close();
            asocket.close();
          }catch (IOException e) {System.out.println("server error"+e);}
        }  public static void main(String[] args) throws IOException{
         ServerSocket aserver = new ServerSocket(6666);
         while(true){
             Thread t1 = new Thread(new testserver2(aserver.accept()));
             t1.start();
          }
       }
    }不过现在又有一个问题,注意看client端的一行语句:  System.out.println(i);
    这个i是要发的长度。当我发送一个字符时,他显示的长度是3。
    他每次显示的长度总是  实际字符数+2。   这是为什么?还请各位高人再一次帮忙