Создание пакета в Java? - PullRequest
       29

Создание пакета в Java?

3 голосов
/ 17 февраля 2011

Я работаю над TCP-сокетами, и мне нужно создать TCP-пакеты в Java, чтобы я мог передавать свой файловый пакет за пакетом по сети, а также это помогло бы мне добавить некоторую дополнительную информацию к пакету вместе с данными.

Возможно ли это? Если да, не могли бы вы привести примеры?

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 17 февраля 2011

Это очень странная просьба, и я очень сомневаюсь, что вы ... действительно ... должны это сделать.

Давайте начнем с того, что вы пытаетесь достичь с помощью способа, которым вы, кажется, предлагаете это сделать:

... передать мой файл [...] по сети, и это также помогло бы мне добавить некоторую дополнительную информацию [...] вместе с данными.

Итак, вы хотите передать файл вместе с некоторыми дополнительными данными / метаданными. Неясно, нужно ли встраивать метаданные в данные файла, но я не понимаю, почему, поэтому я предполагаю, что нет. (Но это действительно не имеет большого значения.)

Вот несколько возможных способов сделать это:

  1. Используйте протокол FTP для передачи файла и метаданных. Файл и метаданные могут рассматриваться как одна единица (например, в ZIP-архиве) или как отдельные файлы. Вы можете организовать это так, чтобы это был клиент-сервер или сервер-клиент. Вы можете использовать готовое клиентское и серверное программное обеспечение. FTPS - более безопасная альтернатива.

  2. Используйте протокол HTTP для передачи файла и метаданных. Файл и метаданные могут рассматриваться как одна единица (например, многокомпонентный документ MIME) или как отдельные документы. Остальное как по FTP. HTTPS - более безопасная альтернатива.

  3. Вы можете создать собственный протокол, который будет работать через соединение TCP / IP, на любой порт, который вы хотите. Вы можете кодировать и передавать файл и метаданные любым удобным для вас способом. Для большей безопасности используйте соединение SSL / TLS через TCP / IP.

  4. Вы можете разбить файл на маленькие куски и отправлять в виде «пакетов» по ​​UDP. Вы должны разобраться с деталями обнаружения и восстановления после потери пакета самостоятельно. Это не рекомендуется.

  5. Вы можете (теоретически) реализовать TCP / IP или UDP / IP поверх необработанных сетевых пакетов, используя JPCAP. Затем выполните одно из перечисленных выше действий над стеком TCP / IP или UDP / IP, который вы только что создали. Это действительно плохая идея. Это огромное количество (ненужной) работы. Это может привести к проблемам с надежностью для вашего приложения и, возможно, для всей вашей локальной сети.

Я бы рекомендовал варианты 1. или 2. как лучший, с 3. в качестве альтернативы, если есть конкретные причины, по которым протоколы HTTP и FTP не будут работать для вас.

(Если вы действительно хотите сделать 5. тогда я был бы очень удивлен, если бы вы могли найти какие-либо примеры TCP / IP, реализованные с использованием JPCAP. Это слишком сумасшедшая идея ...)

1 голос
/ 17 февраля 2011

Вы можете использовать JPCAP для создания необработанных TCP-пакетов, однако я бы спросил, зачем вам это нужно, если целью является передача файла. Для передачи файла вам не нужно определять, как он передается пакет за пакетом для 99% + случаев использования.

0 голосов
/ 17 февраля 2011

Если вы хотите контролировать отдельные пакеты, скорее всего, TCP - это неправильный протокол для вас - посмотрите на UDP.(Это доступно через DatagramSocket или DatagramChannel в Java.)

Для TCP у вас просто есть поток байтов (или фактически два потока - отправляющий OutputStream и получающий InputStream), и узаботиться о базовых пакетах, отправленных вашей реализацией TCP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...