Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для HenryDukart
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462

Не происходит запись во входной поток клиента

18.12.2014, 23:19. Показов 762. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сервер создает объект, превращает его в xml и передает клиенту, где xml обратно преобразуется в объект. Проблема в том, что клиент не видит, что у него что-то есть в потоке.

Сервер:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Server {
 
    public static void main(String[] args) 
    {       
        try(ServerSocket serv = new ServerSocket(8081))
        {
            System.err.println("Initialized");
            while(true)
            {
                Socket sock = serv.accept();
                ServerThread server = new ServerThread(sock);
                server.start();
            }
        } 
        catch(IOException e) 
        { System.err.println(e); }
    }
 
}
 
class ServerThread extends Thread
{
    private OutputStream os;
 
    public ServerThread(Socket s) throws IOException {
        os = s.getOutputStream();
    }
    public void run() 
    {
        try{
            MessageConnect m = new MessageConnect("Lesha", "Alex Ivanov");
            MessageConnect.toXml(m, os);
            
        }
        catch (Exception e){
            System.err.println(e);
        }
        
    }
}


Клиент:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.io.InputStream;
import java.net.Socket;
 
public class Client{
        public static void main(String[] args) throws InterruptedException
    {
        Socket s = null;
        try
        {
            s = new Socket("Denis", 8081);
            
            System.out.println("Подождите...");
            Thread.sleep(2000);
            InputStream in = s.getInputStream();
            MessageConnect m = MessageConnect.fromXml(in);
            System.out.println("Готово.");
            s.close();
        }
        catch (Exception e){
            System.err.println(e);
        }
        
    }
}


Сообщение:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
 
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement
public class MessageConnect  implements Serializable 
{   
    private static final long serialVersionUID = 1L;    
    public String userNic;
    public String userFullName;
    
    public MessageConnect(){
    }
    public MessageConnect(String userNic, String userFullName)
    {
        this.userNic = userNic;
        this.userFullName = userFullName;
    }
    
        public static void toXml( MessageConnect msg, OutputStream os )
                throws JAXBException{
        JAXBContext context =
                JAXBContext.newInstance(MessageConnect.class);
        Marshaller m = context.createMarshaller();
        m.marshal( msg, os );
    }
 
    public static MessageConnect fromXml( InputStream is )
                throws JAXBException{
            JAXBContext context =
                    JAXBContext.newInstance(MessageConnect.class);
            Unmarshaller u = context.createUnmarshaller();
            MessageConnect m = ( MessageConnect ) u.unmarshal( is );
            return  m;
    }
}


Помогите, пожалуйста.

Добавлено через 5 часов 33 минуты
Запись происходит, но unmarshaller почему-то не читает из InputStream. Если предварительно записать в файл, то все работает. Не понимаю.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.12.2014, 23:19
Ответы с готовыми решениями:

При запуске сервиса поток повисает, и запись в файл не происходит
Всем привет! Такая проблема, при запуске сервиса поток повисает, и запись в файл не происходит. Но при остановке сервиса всё начинает...

входной поток данных
Из входного потока данных нужно подсчитать количество повторов в тексте DK и 22

Стандартный входной поток
Добрый день, помогите разобраться. Хочу написать функцию, которая читает из входного потока некое количество данных вида...

2
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
19.12.2014, 15:32
Цитата Сообщение от HenryDukart Посмотреть сообщение
Проблема в том, что клиент не видит, что у него что-то есть в потоке
И что именно происходит?
0
 Аватар для HenryDukart
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
19.12.2014, 16:21  [ТС]
У клиента во входной потока записалась информация, но анмаршаллер не может выполнить преобразование и зависает на строке
Java
1
 MessageConnect m = ( MessageConnect ) u.unmarshal( is );
Добавлено через 4 минуты
turbanoff, если клиент сначала считывает информацию из входного потока в массив байт, а потом из потока массива байт уже делает анмаршал, то программа работает
Java
1
2
3
            byte [] array = new byte[in.available()];
            in.read(array);
            MessageConnect m = MessageConnect.fromXml( new ByteArrayInputStream(array) );
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.12.2014, 16:21
Помогаю со студенческими работами здесь

Как реализовать входной поток
Доброе время суток , я реализую входной поток, но такая проблема что на выходе у меня получается что то нехорошее, а в некоторый случаях...

Метод, читающий входной поток
Есть программа из Шилдта. Пишу её в Eclipse. public class Menu { public static void main(String Arhs) throws...

дан входной поток данных
Здравствуйте помогите пожалуйста! дан входной поток данных: целые числа a1, a2, a3, ..., a50! Получить сумму первых трех чисел данного...

Разбить входной поток сообщений
Предупреждаю сразу, столкнулся с GPSS впервые, камнями сильно не закидывать. При решении задачи возник вопрос, как разбить входной поток на...

Как очистить входной поток от '\n'?
Программа закрывается #include "stdafx.h" #include <iostream> #include "conio.h" #include "windows.h" using namespace::std; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru