DataOutPutStream: получение ошибки записи в сокет

Я пишу P2P-сеть на Java, где каждый узел отправляет файлы друг другу.

В настоящее время мой код показывает странную ошибку, и я не могу понять, почему. Ниже приводится ошибка:

java.net.SocketException: программное обеспечение вызвало прерывание соединения: ошибка записи в сокет

Это мой код, который отправляет файл:

 public void sendRequest(String fileName, String host, int port ) throws UnknownHostException, IOException
        {
            Socket socket = new Socket("localhost", port);
            OutputStream os = socket.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            File myFile = new File(fileName);
            byte[] mybytearray = new byte[(int) myFile.length()];  


            dos.writeUTF( myFile.getName());  //send file name
            dos.writeLong(mybytearray.length);  //send file size
            System.out.println("file size: "+mybytearray.length);
            dos.write(mybytearray, 0, mybytearray.length);  //send file content
            dos.flush(); 
            dos.close();
            socket.close();
    }

и следующий код получает файл:

private void processRequest( )
    {
        int bytesRead; 
        OutputStream output  = null;

        try
        {
            InputStream in = socket.getInputStream();  
            DataInputStream clientData = new DataInputStream(in);  
            String fileName = clientData.readUTF();

            //System.out.println(this.currentNodeName +"Has received file: "+fileName);

            //if file already exists, then just send friends
            File file = new File(this.dirLocation+fileName);

            if( !file.exists() )
            {

                output = new FileOutputStream(this.dirLocation+fileName); //get file name
                long size = clientData.readLong();//get file size
                byte[] buffer = new byte[1024]; 

                //read file content and save the file
                //System.out.println(this.currentNodeName +"saves the file");
                while (size > 0 && ( bytesRead = clientData.read(buffer, 0, (int)Math.min(buffer.length, size))) != -1 )     
                {     
                    output.write(buffer, 0, bytesRead);     
                    size -= bytesRead;     
                } 
                output.close();

}

Что я делаю неправильно?

я использую DataOutputStream потому что мне нужно отправить имя файла и размер файла на принимающий узел.

0 ответов

Другие вопросы по тегам