Привет У меня возникли проблемы с методом readLong()
DataInputStream.
Когда я ставлю значение через DataOutputStream.writeLong()
, это правильное значение, но когда оно отправлено, оно намного больше, чем должно быть, у меня есть код, все в работоспособном даном так, чтобы программа не замерзаетDataInputStream readLong() получает неправильное значение
это клиент
socket = new Socket(ipAddress, Port);
bos = new BufferedOutputStream(socket.getOutputStream());
dos = new DataOutputStream(bos);
File f = new File("C:/Users/lukeLaptop/Downloads/RemoveWAT22.zip");
long length = f.length();
dos.writeLong(length);
String name = f.getName();
dos.writeUTF(name);
FileInputStream fis = new FileInputStream(f);
bis = new BufferedInputStream(fis);
int theByte = 0;
while ((theByte = bis.read()) != -1) {
bos.write(theByte);
}
bis.close();
dos.close();
сторона сервера
ServerSocket server = new ServerSocket(8080);
while (true) {
socket = server.accept();
System.out.println("Got a client !");
bis = new BufferedInputStream(socket.getInputStream());
dis = new DataInputStream(bis);
int filesCount = dis.readInt();
long fileLength = dis.readLong();
//String fileName = dis.readUTF();
File f = new File("C:/test/here/test.zip");
FileOutputStream fos = new FileOutputStream(f);
BufferedOutputStream bos = new BufferedOutputStream(fos);
for (int j = 0; j < fileLength; j++) {
bos.write(bis.read());
}
bos.close();
dis.close();
EDIT
Если кто-нибудь может помочь мне с кодом, который очень ценится, я новичок в сокетах, и я немного запутался в вещах, все, что мне нужно, это отправить длину файла, используя writeLong метод dataoutputstream и отправить также имя с writeUTF, но я не знаю, что происходит и как его исправить.
В вашем коде отсутствует 'GetLong()' ... – Rainbolt
, он имеет только чтение и всегда получает неправильное значение –
В DataOutputStream нет метода getLong() или readLong(). Исправьте свой титул. – EJP