Отправить строку запроса + файл с помощью сокетов - Java

1

Я пытаюсь отправить "строку запроса" и файл через сокет.

Клиент (отправитель)

Socket socket = new Socket(hostName, SOCKET_PORT);
DataOutputStream os = new DataOutputStream(socket.getOutputStream());
FileInputStream fis = new FileInputStream(fileName);
os.writeBytes("PUT c:\dev\foo\helloworld.txt" + "\r\n")
byte[] buffer = new byte[1024];
int bytes;
while((bytes = fis.read(buffer)) != -1 ) {
    try {
        os.write(buffer, 0, bytes);
    } catch (IOException e) {e.printStackTrace();}
}

Север (приемник)

ServerSocket serverSocket = new ServerSocket(SOCKET_PORT);
Socket clientSoc = serverSocket.accept();
InputStream inputStream = clientSoc.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String requestLine = bufferedReader.readLine();
File currentFile = (File)new ObjectInputStream(inputStream).readObject(); //This doesn't work
byteSequence = new byte[new Long(currentFile.length()).intValue()];
for(int i =0; i<currentFile.length();i++){
    byteSequence[i] = (byte)clientSoc.getInputStream().read();
} 
try {
    FileOutputStream newFile = new FileOutputStream(currentFile.getName());
    newFile.write(byteSequence,0, byteSequence.length);
} catch (IOException e) {e.printStackTrace();}

Я могу прочитать строку запроса на сервере, но когда я пытаюсь прочитать файл, он генерирует исключение (строка ниже).

File currentFile = (File)new ObjectInputStream(inputStream).readObject(); 

java.io.Stream.CorruptedException:

java.io.StreamCorruptedException: invalid stream header: 0A48656C

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

  • 2
    it throws an exception Пожалуйста, опубликуйте трассировку стека.
Теги:
sockets
stream
tcp

1 ответ

2

Вы пытаетесь получить доступ к объекту, который даже не был передан в сокет. Вы передали только байты строки на сервер, но никогда не передаете объект на сервер с помощью ObjectOutputStream.

  • 0
    Должен ли я использовать 2 отдельных потока для текста и файлов? @Rod_Algonquin
  • 0
    @ojhawkins зависит, но перед этим вы даже передаете объект файла в поток?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню