#java #android #image #sockets
#java #Android #изображение #сокеты
Вопрос:
Я пытаюсь отправить изображение с помощью сервера Java на мое устройство Android, но это не работает, и я не знаю почему.
Код для сервера является:
public class Main {
public static void main(String argv[]) throws Exception
{
ServerSocket welcomeSocket = new ServerSocket(6789);
Image image = null;
while(true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
ObjectOutputStream outToClient = new ObjectOutputStream(connectionSocket.getOutputStream());
File f = new File("/resources/image.png");
image = ImageIO.read(f);
outToClient.writeObject( new ImageIcon("" image) );
}
}
}
Я думаю, что проблема в сервере, потому что приложение для Android работает с другим сервером
клиент:
BufferedReader inFromUser =new BufferedReader(new InputStreamReader(System.in));
DataInputStream in;
BufferedInputStream buf;
DataInputStream mod ;
Socket sc = new Socket(myIP,48000);
DataInputStream infromServer = new DataInputStream(sc.getInputStream());
mod = infromServer;
Bitmap mPhotoPicture = BitmapFactory.decodeStream(modifiedSentence);
imagen.setImageBitmap((mPhotoPicture));
Комментарии:
1. можете ли вы сравнить данные, отправленные двумя серверами? (ваш и другой). Есть ли причина не использовать какой-либо более высокий транспортный уровень? скажем, http?
Ответ №1:
Другой сервер, вероятно, отправляет необработанные данные изображения (не сериализованный объект ImageIcon). Похоже, BitmapFactory ожидает необработанные байты изображения. Попробуйте записать необработанные байты в свой сокет:
FileInputStream fis = null;
int size = (int)f.length();
byte[] bytes = new byte[size];
fis = new FileInputStream( f );
int read = fis.read( bytes );
connectionSocket.getOutputStream().write( bytes );
connectionSocket.getOutputStream().flush();
Очевидно, вам нужно добавить некоторое обнаружение ошибок и обработку, чтобы сделать это надежным.
Комментарии:
1. Я новичок в этом … я ввел код, и не видно, чтобы он работал
2. Не работает как? Не компилируется или не функционирует должным образом?
3. это не работает должным образом или, возможно, я что-то делаю неправильно. если бы вы могли немного меня подтолкнуть
4. Есть ли исключение любого типа на стороне клиента, декодирующее изображение? Или он просто не получает данные? Попробуйте добавить некоторую отладку или перехват пакетов (tcpdump / wireshark), чтобы убедиться, что данные передаются с сервера на клиент.
5. я работал на новом сервере и клиенте… я сталкиваюсь с той же проблемой, пытаясь использовать вашу идею, но куда вы помещаете данные из файла в байты???