【问题标题】:How to send different datatypes over in a socket connection如何在套接字连接中发送不同的数据类型
【发布时间】:2015-04-12 10:31:34
【问题描述】:

我正在尝试制作一个客户端/套接字程序,该程序涉及从客户端发送一个字符串(以确定应该使用哪个密钥)到服务器,服务器以字节形式发送回一个密钥,然后客户端发送一个以字符串形式请求文件,服务器将请求的文件发送给用户,该文件可以用他们的密钥解密。 我了解密码学方面,我对如何区分向服务器发送字节、字符串或文件以及从服务器发送文件感到困惑。我了解如何发送单个流(字节、字符串或文件),但是如果这有任何意义,我找不到将所有这些发送到一个流中的方法? 每次我想发送一个字符串时,我是否必须创建一个新的流或套接字连接,然后是一个新的来发送字节,然后是一个新的来发送文件?

我可以查找任何资源吗?干杯!

【问题讨论】:

标签: java sockets io outputstream


【解决方案1】:

基本上,通过套接字连接发送的是一堆字节。这可以表示字符串、字符或字符串数​​组等。

如果你想在一个数据包中发送所有这些,你需要为每种类型的数据结构指定长度,即字符串最大为 1024 字节,字节最大为 512 字节......等等.这样做将使您能够破译接收端的信息。

如果您没有最大大小并且不想设置它们,那么您可以采用不同的方法并在其自己的数据包中发送每个数据结构。如果你采用这条路线,你需要指定数据包的第一个字节来标记接收者这是什么类型的数据;即 1=bytes, 2=string, 3=array..etc

【讨论】:

  • 我相信数据包是抽象的,所以你不一定说你想在它自己的数据包中发送数据结构,而只是说你通过线路发送 X 字节的数据并让TCP/IP 堆栈处理数据包分块。不过我可能错了,因为这正是 C 套接字的工作方式,而且这是一个 Java 问题。
  • 我给出了一个高级细分。在网络上,TCP/UDP 和 IP 通常会分割数据包以及其他内容。不过,从端到端的角度来看,如果@Java Noob 不喜欢我的第一个建议,我是说他可以单独发送每条数据,并为这些数据添加一个标志字节。
  • 我明白你在说什么。您已经获得了我的支持,但只是想确保 OP 不会因为必须处理数据包大小而感到困惑
  • 不用担心。只是澄清自己。
猜你喜欢
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多