Server
public class Test4 {
 private static int num = 1;
  public static void main(String[] args) throws IOException {
    ServerSocket servsock = new ServerSocket(7000);
    File myFile = new File("src/ImageBase64/one.txt");
    while (true) {
      Socket sock = servsock.accept();
      OutputStream out = sock.getOutputStream();
      BufferedInputStream bis = new BufferedInputStream(new FileInputStream(myFile));
     
      int count;
      byte[] buffer = new byte[8192];
      while ((count = bis.read(buffer)) > 0)
      {
        out.write(buffer, 0, count);
        System.out.println(num++);
      }
      System.out.println("传送完成");
      out.flush();
    }
  }
}
Client
public class Test5 {
private static int num = 1;
  public static void main(String[] argv) throws Exception {
    Socket sock = new Socket("111.187.144.106", 7000);
    InputStream is = sock.getInputStream();
    FileOutputStream fos = new FileOutputStream("one.txt");
    
    int count;
    byte[] buffer = new byte[2048];
    while ((count = is.read(buffer)) > 0)
    {
      fos.write(buffer, 0, count);
//      System.out.println(num++);
    }

    System.out.println("接收完成");
    fos.flush();
    fos.close();
  } 
}

解决方案 »

  1.   


    Server.java
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;public class Test4 {
    private static int num = 1; public static void main(String[] args) throws IOException {
    ServerSocket servsock = new ServerSocket(7000);
    File myFile = new File("src/log4j.properties");
    Socket sock = servsock.accept();
    OutputStream out = sock.getOutputStream();
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
    myFile)); int count;
    byte[] buffer = new byte[8192];
    while ((count = bis.read(buffer)) > 0) {
    out.write(buffer, 0, count);
    System.out.println(num++);
    }
    System.out.println("传送完成");
    out.flush();
    sock.close();
    }
    }
    Client.java
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.net.Socket;public class Test5 {
    private static int num = 1; public static void main(String[] argv) throws Exception {
    Socket sock = new Socket("localhost", 7000);
    InputStream is = sock.getInputStream();
    FileOutputStream fos = new FileOutputStream("one.txt");
    int count;
    byte[] buffer = new byte[2048];
    while ((count = is.read(buffer)) > 0) {
    fos.write(buffer, 0, count);
    System.out.println("----");
    }
    System.out.println("接收完成");
    fos.flush();
    fos.close();
    sock.close();
    }
    }
      

  2.   

    应该是在while ((count = is.read(buffer)) > 0)堵塞住了,你把server端的out关掉试试。
    System.out.println("传送完成");
      out.flush();
    out.close();
    谢谢理解,这东西环境不好配。
      

  3.   

    楼上的说的对。。是这个问题。。读取输入流的时候没有结束符。所以就阻塞了。。
    现在解决了
    我没把out关闭。应该后面这个连接还要用。。
    我的方法是在服务器端发送一个结束标志。。再根据这个标志关闭