如何在android中的套接字连接中发送文件或字符串?

时间:2014-05-15 06:44:45

标签: java android sockets inputstream

我正在开发一个能够将文件和字符串(消息)发送到另一个Android设备的Android应用程序。在这里,我有一台服务器移动,另一台作为客户端。

我真的很震惊,使用相同的套接字发送文件(图像)和字符串。如何识别发送信息是文件还是字符串。

请帮我解决这个问题。客户端使用服务向服务器发送消息,服务器使用ascynctack接收数据。

2 个答案:

答案 0 :(得分:0)

这是一种不仅适用于Android的一般技术。通常情况下,您会发送带有标题的信息,作为如何处理它的提示。

E.g。您发送的所有内容都可以看作是一个字节数组。第一个字节可以用作"消息类型"例如0x00表示字符串,0x01表示图像,依此类推。如果您不确定消息的其余部分的长度,并且需要为它准备缓冲区,那么您还可以将2 - 5个字节作为int来说明此消息的长度。然后相应地解码消息的结果。

答案 1 :(得分:0)

我认为你必须制定一个简单的协议来做到这一点 示例:您将有一个消息结构(您在客户端和服务器之间发送/接收):[message_type] [message_length_in_byte] [chunked_data] [sequence_index] [last_sequence]
其中:
  - message_type:是一个4字节的整数,它定义你的消息类型:(例如:0 =消息,1 =发送文件)
  - message_length_in_byte:是一个4字节的整数,它是以字节为单位的数据长度。
  - chunked_data:你的数据在这里,它将有'message_length_in_byte'字节来读取。因为在某些情况下您的数据会非常大(您将发送文件),因此您必须将数据拆分为多个数据(分块数据)。所以最好定义这个字段的最大值
 示例:您可以为每条消息设置'chunked_data'的最大长度为:128,512,.... bytes或您想要的所有内容。
  - sequence_index:是一个4字节的整数,因为你的数据将分成很多部分/所以这个字段会让你知道消息的顺序
  - last_sequence:1个字节,其值仅为0或1。 0 =您的数据将有更多,其余数据将在稍后发送给您,因此您必须阅读更多数据才能获得完整数据。 1 =表示这是最后一个数据。 (例如:当你发送文件时,你会将数据分成很多部分,并按顺序发送。所以当接收者收到last_sequence = 1的消息时,这意味着这是文件的最后一个数据,所以他们会知道您已发送文件的所有数据)。   - >这是解决问题的唯一想法。谢谢