Я делаю мессенджер в Java, и я хочу добавить возможность отправлять изображения, а также текст. Первое, что пришло в голову, - создать новые сокеты и потоки ввода и вывода. Во-первых, будет ли это работать, и это хорошая практика. Во-вторых, если это не сработает, то как получается, что принимающий конец сообщения определяет, что то, что он получает, является изображением или строкой?Два сокета для единственного подключения
ответ
Выходной поток содержит байты, которые необходимо создать в сообщениях. Читатель знает, какой тип данных вы отправили, поскольку отправитель должен будет указать, какой тип сообщения он отправляет.
например. если вы пишете слово «изображение» как строку, вы можете предположить, что то, что следует за ним, является образом.
Затем, как узнать, какой тип объекта он находится в java? – dsiegler19
@ dsiegler19 Это тип, который вы сказали, когда вы его написали. –
Помните, что вы не передаете строки или изображения, вы обмениваетесь Сообщения. Сообщение должно иметь связанный с ним тип содержимого или сообщения.
Спасибо, я получил его, после чего по какой-то причине полностью испортил .substring где-то в коде, в результате чего он сильно разбился. Я использовал ключевое слово instanceof. – dsiegler19
Похоже, вы используете сериализацию Java для отправки сообщений туда и обратно. Хотя это будет работать и подходит для тестового проекта, если вы хотите быть надежным, вам действительно нужно определить отдельный формат сериализации, который вы контролируете, например. JSON или XML-сообщения. Это поможет с будущими расширениями (не забудьте указать номер версии типа сообщения в сообщениях) – dovetalk
Будет работать, но у вас будет две связи, и это, вероятно, не самая лучшая идея. Вам нужно ввести некоторые * метаданные * в свой формат данных, чтобы указать, что такое String, и каково изображение (и о какой будущей вещи вы еще не думали). – OrangeDog
Я не думаю, что вам нужны несколько сокетов. Все идет по той же трубке. Два сокета не дадут вам ничего. Помните, что розетки - это двухсторонние трубы. – dcow
Так что в настоящее время у меня есть способ отправки кода (aka int) и сообщения (иначе строки). Я попытался поиграть с этим, поэтому я отправляю код, указывающий на принимающий конец, изображение, проходящее через него, а затем меняет сообщение только на объект, но он просто хочет отправить путь к файлу изображения. Кроме того, я не знаю, как определить, является ли объект строкой или файлом. – dsiegler19