Код отправки:
public class client {
private Socket socket;
private ObjectOutputStream out;
public static void main(String[] args) {
client client = new client();
client.startClient();
}
@SuppressWarnings("unchecked")
public void startClient(){
try {
socket = new Socket("localhost", 7800);
String str = "Send photo";
out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(str);
out.flush();
out.reset();
DataOutputStream outF = new DataOutputStream(socket.getOutputStream());
File file = new File("photo_1486047476160.jpg");
FileInputStream inF = new FileInputStream(file);
byte[] bytes = new byte[5*1024];
int count;
long lenght = file.length();
outF.writeLong(lenght);
while ((count = inF.read(bytes)) > -1) {
outF.write(bytes, 0, count);
}
inF.close();
outF.close();
out.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
Код приема:
public class ServerTest {
public static void main(String[] args) {
ServerTest server = new ServerTest();
server.run();
}
public void run() {
try {
ServerSocket serversocket = new ServerSocket(7800);
Socket socket = null;
String object;
while (serversocket != null) {
socket = serversocket.accept();
ObjectInputStream obIn = new ObjectInputStream(socket.getInputStream());
while ((object = (String) obIn.readObject()) != null){
if (object.equals("Send photo")){
FileOutputStream out = new FileOutputStream("test2.jpg");
DataInputStream in = new DataInputStream(socket.getInputStream());
byte[] bytes = new byte[5*1024];
int count, total=0;
long lenght = in.readLong();
while ((count = in.read(bytes)) > -1) {
total+=count;
out.write(bytes, 0, count);
if (total==lenght) break;
}
out.close();
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
Сервер по задумке должен весь жизненный цикл от клиента ждать разные объекты. Но иногда на сервер нужно будет отправлять и картинки.
При отправки картинки уходит 15096 байт, приходит 15097 байт, когда открываю картинку пишет: We can't open this file. Походу в стриме остается какой-то мусор, после отправки объекта и он записывается картинке.
Открыл изображение через блокнот и посмотрел в чем разница между оригиналом. Оказалось на один первый символ больше чем в оригинале, я его удалил и картинка открылась. Теперь собственно вопрос откуда оно берет этот первый символ?
Еще одно наблюдение..при отправке count ровняется 5120, 5120, 4986. А при получение уже 5120, 5120 и 4987.
Нужно было удалить строку out.reset();
- теперь работает.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть строка типа "дом15/2"Каким образом можно найти границу между буквами и цифрами и поставить туда пробел
Какие есть важные отличия API level < 11 и API level > 11