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
потому что мне нужно отправить имя файла и размер файла на принимающий узел.