这个Client是用来传送一个文件的package tcpEcho;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;public class Client2 {
private Socket socket; private PrintWriter out; private BufferedReader in; private BufferedReader fromFile; public Client2() {
try {
socket = new Socket("localhost", 20001);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
fromFile = new BufferedReader(new FileReader("data"));
socket.setSendBufferSize(1024);
socket.setReceiveBufferSize(1024);
} catch (IOException e) { }
} public void run() {
try {
int count = 0;
while (fromFile.ready()) {
int data = fromFile.read();
char temp = (char)data;
System.out.println(temp);
out.println(temp);
out.flush();
count ++;
// in.read();
System.out.println(in.read());
}
System.out.println("File transfer is completed.");
System.out.println(count);
in.close();
out.close();
fromFile.close();
socket.close();
} catch (IOException e) { }
}

public static void main(String args[]){
Client2 myClient = new Client2();
myClient.run();
}
}测试的文件是一个文本,里面都是0。。 我的问题是怎样把Buffer用0填满然后发送出去,我现的代码是把0一个个的发送出去,太没效率了。

解决方案 »

  1.   

    可以先把文件内容读入字节数组, 然后一下就可以发送完成        File file = null;
            java.io.FileInputStream is = new java.io.FileInputStream(file);
            byte[] buf =  new byte[(int)file.length()];
            is.read(buf);
            out.write(buf);
            out.flush();
            out.close();
            is.close();        
      

  2.   

    这样是把整个文件一下都发送过去,太大了。。最好是一个package 一个package 的发
      

  3.   

    重新写了程序。。一次发1024个0了,但是新问题是在发送大约60 - 80 个packet后,程序就卡住了,debug的时候发现 3 没打出来,所以应该是 out.flush()出了问题,请教。package part4;import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;public class Client {
    public static void main(String args[]) {
    int port = 20001;
    try {
    Socket socket = new Socket("localhost", port);
    PrintWriter out = new PrintWriter(socket.getOutputStream());
    BufferedReader in = new BufferedReader(new InputStreamReader(socket
    .getInputStream()));
    BufferedReader fromFile = new BufferedReader(new FileReader("data")); int count = 0;
    while (fromFile.ready()) {
    String data = fromFile.readLine();
    System.out.println("1");
    out.println(data);
    System.out.println("2");
    out.flush();
    System.out.println("3");
    // in.readLine();
    count++;
    System.out.println(count);
    }
    out.println("exit");
    System.out.println("File transfer is completed.");
    System.out.println(count + "packets has been sent.");
    fromFile.close();
    socket.close();
    } catch (IOException e) {
    System.out.println(e);
    }
    }}