发送一个整数值,然后用java将整个文件从客户端发送到服务器

发送一个整数值,然后用java将整个文件从客户端发送到服务器,java,file-upload,client-server,Java,File Upload,Client Server,基本上,这就是我所做的:- 客户端 public class Client { public String uploadFile(String filePath,int language) throws Exception { Socket sock = new Socket("127.0.0.1", 25000); // make the file object from filepath File myFile = new Fil

基本上,这就是我所做的:- 客户端

public class Client {

    public String uploadFile(String filePath,int language) throws Exception {
        Socket sock = new Socket("127.0.0.1", 25000);


        // make the file object from filepath
        File myFile = new File(filePath);

        // send the integer 'language'
        OutputStream os = sock.getOutputStream();
        OutputStreamWriter osw = new OutputStreamWriter(os);
        BufferedWriter bw = new BufferedWriter(osw);
        bw.write(language);
        bw.flush();

        // send the file data
        byte[] mybytearray = new byte[(int) myFile.length()];
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
                myFile));
        bis.read(mybytearray, 0, mybytearray.length);
        os.write(mybytearray, 0, mybytearray.length);
        os.flush();
        bis.close();

        // get the reply
        InputStream is = sock.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String message = br.readLine();

        sock.close();

        return message;

    }
}
服务器端:-

 void connectToNewClient(Socket sock) throws IOException,
            InterruptedException {

        // get the integer 'language'

        InputStream is = sock.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String language = br.readLine();

        // Read file data sent by client and store in server
        byte[] mybytearray = new byte[50000];
        FileOutputStream fos = new FileOutputStream("Main.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        int bytesRead = is.read(mybytearray, 0, mybytearray.length);
        bos.write(mybytearray, 0, bytesRead);
        bos.close();

        // give back response
        OutputStream os = sock.getOutputStream();
        OutputStreamWriter osw = new OutputStreamWriter(os);
        BufferedWriter bw = new BufferedWriter(osw);
        bw.write(response);

        bw.flush();

        sock.close();

    }
所以我的问题是,当我只从客户端发送文件或只发送整数时,我可以在服务器端接收它们,但是,当我尝试同时发送它们时,我在服务器端没有接收到任何东西。我猜我搞乱了这么多writer对象和数据流对象。请帮我找出哪里出了问题。非常感谢。
注意:我删除了几行我认为与我的问题无关的代码。

您将流包装在BufferedWriter中,这通常是一件好事,原因有很多。代码中的奇怪之处在于,您将该编写器用于整数,而将未包装的输出流用于文件。我怀疑这两个写操作不能在不重新实例化写入程序的情况下使用


我建议您只使用一个编写器重构代码。我会选择更通用的,它允许您发送实现可序列化接口的对象(您的场景已经满足此约束)。您可以通过ObjectInputStream直接接收对象。

是否尝试关闭OutputStreamWriter?