为自定义TCP协议实现客户端

时间:2018-01-10 16:40:09

标签: java sockets tcp protocols

我必须通过基于XML格式的自定义协议实现客户端与服务器的通信。这是一个基于TCP的应用层协议。因此,我的客户端发送请求XML消息并收到响应,也是XML消息。现在,我考虑如何确保在开始解析之前我收到了整个消息。

我看到两个方法:

  1. 将字节接收到某个幻数,表示消息结束。 这是最好的approch(对我而言),是吗?

  2. 但是,可能没有神奇的数字和消息的大小是未知的。那个案子怎么样?我看到一些客户端用于其他协议,我看到类似的东西。

    while(true){
        r = socket.read(buffer, offset, 1024);
        if(r < 1024) break;
        offset += r;
    }
    // parse buffer
    
  3. 我不确定是否可以。它假定如果我们读取的字节小于1024字节,则表示已完成。好吗?

    有什么建议的解决方法?

1 个答案:

答案 0 :(得分:0)

在自定义协议中,您需要包含以下步骤:

<强>客户端

  1. 计算XML内容的1024字节块数,即 ceiling(XML内容字节数/ 1024)
  2. 通过套接字
  3. 将步骤1的号码发送到服务器
  4. 以定义的缓冲区大小(例如1024字节)
  5. 的块发送内容

    服务器

    1. 读取从客户端

    2. 接收的块数
    3. 在一个大小等于步骤1中读取的数字的for循环中,开始接收预定义缓冲区大小的内容。

    4. 这样服务器就知道实际内容在开始接收XML内容之前有多少字节。