在java中创建数据包?

时间:2011-02-17 12:46:20

标签: java sockets packet

正在使用TCP套接字,我需要在Java中创建TCP数据包,以便我可以通过网络和数据包传输我的文件包。它还可以帮助我在数据包中添加一些额外的信息以及数据。

有可能吗?如果可以,请提供任何示例吗?

提前致谢

3 个答案:

答案 0 :(得分:1)

您可以使用JPCAP构建原始TCP数据包,但是如果目的是传输文件,我会问您为什么需要。要传输文件,您无需确定如何在99%以上的用例中逐包传输文件。

答案 1 :(得分:1)

这是一个非常奇怪的请求,我非常怀疑你......真的......需要这样做。

让我们从你想要的方式开始尝试实现的目标:

  

...通过网络传输我的文件&它还可以帮助我添加一些额外的信息和数据。

因此,您希望将文件与一些其他数据/元数据一起传输。目前尚不清楚元数据是否需要嵌入到文件数据中,但我不明白为什么,所以我不会假设。 (但它确实没有太大区别。)

以下是一些可行的方法:

  1. 使用FTP协议传输文件和元数据。文件和元数据可以被视为一个单元(例如,在ZIP存档中)或作为单独的文件。您可以安排此操作,以便它是服务器的客户端,或服务器到客户端的传输。您可以使用现成的客户端和服务器软件。 FTPS是一种更安全的替代方案。

  2. 使用HTTP协议传输文件和元数据。文件和元数据可以视为一个单元(例如MIME多部分文档)或单独的文档。休息至于FTP。 HTTPS是一种更安全的替代方案。

  3. 您可以在任何所需的端口上创建通过TCP / IP连接运行的自定义协议。您可以以任何方式编码和传输文件和元数据。为了提高安全性,请使用基于TCP / IP连接的SSL / TLS。

  4. 您可以将文件拆分为小块并通过UDP作为“数据包”发送。您必须自己处理检测和恢复丢包的详细信息。不建议这样做。

  5. 您可以(理论上)使用JPCAP在原始网络数据包上实现TCP / IP或UDP / IP。然后通过刚刚创建的TCP / IP或UDP / IP堆栈运行上述之一。这是一个非常糟糕的主意。这是(大量的)(不必要的)工作。它可能会导致您的应用程序的可靠性问题,并可能导致整个本地网络。

  6. 我推荐选项1.或2.最好,选择3.作为替代,如果有特殊原因,为什么HTTP& FTP协议不适合你。

    (如果你真的想做5.那么如果你能找到任何使用JPCAP实现的TCP / IP的例子,我会感到非常惊讶。这太棒了......)

答案 2 :(得分:0)

如果你想控制单个数据包,大多数情况下TCP是你的错误协议 - 看看UDP。 (这可以通过Java中的DatagramSocket或DatagramChannel访问。)

对于TCP,你只需要一个字节流(或者实际上是两个流 - 一个发送的OutputStream和一个接收的InputStream),而不必关心TCP实现发送的底层数据包。