【问题标题】:Android sending packetets int8 to tcp serverAndroid 将数据包 int8 发送到 tcp 服务器
【发布时间】:2023-03-23 18:55:01
【问题描述】:

如何将数据包从 android 发送到等待 int8 变量的 SFML tcp 服务器。

服务器端:

  sf:Int8 liczbunia;
    listener.listen(55555);
    listener.accept(socket);
    cout << "connected";
    sf::sleep(sf::milliseconds(500));
    socket.receive( paket );
    paket >>  liczba;

我在客户端尝试了这段代码:

        Socket socketClient = new Socket("192.168.0.100",55555); 
        PrintWriter(socketClient.getOutputStream(),true);
        DataOutputStream dout = new DataOutputStream(socketClient.getOutputStream());
        dout.writeInt(9);
        dout.flush();

虽然客户端连接到服务器,但服务器没有收到数据包。 从android发送数据包的最佳方式是什么?

【问题讨论】:

    标签: android sockets tcp sfml packet


    【解决方案1】:

    来自the tutorial on sf::Packet

    数据包解决了“消息边界”问题,这意味着当您在 TCP 套接字上发送数据包时,您会在另一端收到完全相同的数据包,它不能包含更少的字节,或者来自下一个数据包的字节数发送。但是,它有一个小缺点:为了保留消息边界,sf::Packet 必须与您的数据一起发送一些额外的字节,这意味着如果您希望它们被正确解码,您只能使用 sf::Packet 接收它们. 简单地说,您不能将 SFML 数据包发送给非 SFML 数据包接收者,它也必须使用 SFML 数据包来接收。 请注意,这仅适用于 TCP,UDP 很好,因为协议本身保留了消息边界。

    解决方案:从套接字读取原始数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 2017-12-28
      • 2021-09-05
      • 2012-07-19
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多