Java通过套接字发送文件/Передачафайлапосокету

问题描述 投票:0回答:1

[ENG]

大家好。我正在编写一个用于通过Java用套接字2种方式发送文件的类这是on GitHub。一切正常,直到文件接收完成。很快:

  • client.java中的硬编码为C:\ Maven \ README.txt
  • 首先我发送文件名
  • 然后我发送文件长度
  • 第三步,我将文件从FileInputStream发送到DataOutputStream

在客户端上:

byte[] bytes = new byte[(int)forSend.length()];
InputStream fin = new FileInputStream(forSend);
int count;
while ((count = fin.read(bytes)) > 0) {
    out.write(bytes, 0, count);
}
fin.close();
fout = new FileOutputStream(filename);
byte[] bytes = new byte[length];
System.out.println("recieving file...");
int count;
while ((count = in.read(bytes)) > 0) {
    fout.write(bytes, 0, count);
}
fout.flush();
fout.close();
  • 服务器上的文件已完全接收(长度和内容相同)

[当我尝试添加用于在此后向套接字写入内容的代码时,启动后服务器和客户端正在等待某些内容(我不知道什么)

[以前,当我丢失一个DataInputStream读取(从服务器发送的消息,但客户端上没有此消息的接收者)时遇到了这种情况。但是目前我正在尝试添加标志,该标志在文件传输完成后会更改,并在以后检查其状态。它在服务器和客户端上都可以使用,但是添加对Socket的读/写操作后,我又回到了服务器和客户端都在等待的情况。

有人可以说出什么问题了吗?

[RUS]

Доброгодня。 пытаюсьсделатькласссфункциямидлядвустороннейпередачифайлапосокету。 Здесь (на гитхабе)кодэтогокласса。 Вкратце:

  • вclient.javaпрописанпутьпередаваемогофайлакакC:\ Maven \ README.txt
  • сначалапередаюпосокетуназваниефайла
  • получивподтверждениеоприеменазванияотправляюдлиннуфайла
  • получивподтверждениеоприеменачинаюотправлятьсамфайл。有关FileInputStream的详细信息,请参见DataOutputStream,有关DataInputStream的详细信息,请参见FileOutputStream(请参见DataOutputStream(请参见)。)>
  • поитогуфайлполучаетсясервером,сохраняетсявзаданномместесзаданнымназванием,имееттужедлиннучтоиоригинал(ивродебыпосодержаниютожеотличийнеимеет,носутьневэтом)
  • Проблемапоявляетсянаследующемэтапе:еслияпытаюсьпослатьпосокетуотсерверакклиентусообщениеотомчтофайлпринят(илижеотклиентаксерверуотомчтопередачафайлазавершена),тоиклиентисервер “виснет”,обаожидают чего-то。 Похожийслучайуменябыл,когдаяпоневнимательностизабылпрописаоьот тогдасерверкакбынаписалсообщение,ноклиентнеимеяобработчиканаэтосообщениепростождал。Новданномслучаеяужеиспользоваллогическуюпеременную,значениекоторойменялпослепередачифайла,идальшеотдельновметодеужепроверялеесостояние。 Состояниеизменяется。 Еслипростоделатьвыводтекстапослеэтого,товсеработает,но,еслитудажедобавить读/写всокет,(исамособойприцепитьчтениенапринимающейстороне),тоиклиентисерверсновазамираютвожидании。

Ктоможетсказать,чтовконечномсчетеупущено?

[ENG]大家好。我正在编写一个用于通过Java用Socket通过文件双向发送文件的类。在GitHub上就是这样。一切正常,直到文件接收完成。很快:在client.java中是硬编码方式...

java file sockets transfer
1个回答
0
投票

[我的朋友Denr01帮助了我,所以我的错误是控制文件长度,我的问题中没有任何地方。因此,我的“完成”确认已写入文件。解决问题的方法在发件人中:

© www.soinside.com 2019 - 2024. All rights reserved.