代码之家  ›  专栏  ›  技术社区  ›  Alex

如何在C~(->)JAVA(Android)之间进行套接字编程

  •  2
  • Alex  · 技术社区  · 15 年前

    我最近开发了一个用于Windows&android的服务器/客户端应用程序,它允许用户通过套接字连接将文件从Windows发送到android手机。

    它对单个文件非常有用,但是试图在单个流中发送多个文件会导致一些问题。我还认识到,除了二进制数据之外,我还需要通过套接字发送消息,以指示错误状态和其他应用程序消息。我在网络编程方面经验不足,想知道什么是最好的前进道路。

    基本上,应用程序的服务器端进入监听状态,使用socket.sendfile传输文件。在Android上,我使用标准的JavaSocket .GETInPiStudio()来接收文件。这对于单个文件传输很有用,但是我应该如何处理多个文件和错误/消息信息?我需要为每个文件使用不同的套接字吗?我应该使用更高级别的框架来处理这个问题,还是可以通过单个套接字发送所有内容?对框架或学习材料有其他建议吗?

    1 回复  |  直到 14 年前
        1
  •  4
  •   qbeuek    15 年前

    基本上,您必须定义某种数据传输协议。您可以尝试查找现有协议或定义自己的协议。现在您的协议定义如下:

    • 客户端连接到服务器
    • 服务器发送文件的内容并终止连接
    • 在连接终止之前,客户端接收文件的内容

    通过TCP套接字通信意味着通常必须将连接视为双向字节流。设计一个协议的最佳方法是让它描述将要发送的内容,以便接收端知道期望的内容。

    为了解决您的问题,您的协议可能如下所示:

    • 客户端连接到服务器
    • 服务器发送将要传输的文件数(4字节整数)。
    • 客户机接收将接收的文件数(4字节整数)。
    • 服务器发送第一个文件的大小(4字节整数-但这会将最大文件大小限制为4GB)
    • 客户端接收第一个文件的大小
    • 服务器发送第一个文件的内容
    • 客户端接收第一个文件的内容-它从TCP流中读取的字节数与第一个文件的大小完全相同,
    • 服务器发送第二个文件的大小
    • 发送所有文件后,服务器关闭连接
    • 在接收到最后一个文件后,客户机等待服务器关闭连接并关闭连接

    您可以通过发送文件名(以文件名长度开头)或一些确认或错误代码来丰富这个简单的协议。您可以在每个块之后使用校验和以n字节块的形式发送文件内容,客户机必须对此进行验证。你的想象力是唯一的限制。