Java - freepascal通信


trpnest
2025-03-17 08:48:10 (15小时前)
  1. 我有一个问题


通讯
</跨度>
java和freepascal(lazarus)应用程序之间。我用套接字。他们正确连接。一切都很顺利,直到我想从一个应用程序发送一些东西到另一个应用程序

4 条回复
  1. 0# 明天会更好 | 2019-08-31 10-32



    这是网络字节排序问题吗?我对FP知之甚少,但是对该主题的快速搜索在这个页面上出现了一些约定:




    http://www.indyproject.org/sockets/teams/core/docs/standards/FreePascal.EN.aspx



    您可能需要在发送之前执行主机到网络的字节排序,然后在使用FP接收时进行网络到主机的字节排序。


  2. 1# 你瞎啊!撞我心了 | 2019-08-31 10-32



    在没有真正了解Pascal(我大约12年前使用它)的情况下,你的UTF8Byte函数看起来很可疑。




    1. function UTF8Bytes(const s: UTF8String): TArray;
      begin
      SetLength(Result, Length(s)+1);
      if Length(Result)>0 then
      Move(s[1], Result[0], Length(s));
      Result[high(Result)] := 0;
      end;

    2. </code>


    什么类型

    TArray

    ,它真的是一个字节数组?
    你想在最后添加一个0字节吗?为什么?



    另外,你在这做什么?




    1. S := abcd’;
      res := UTF8Bytes(S);
      send(socket, res, sizeof(res), 0);
      send(socket, res, sizeof(res), 0);

    2. </code>


    是UTF8String类型的?为什么要发送两次相同的字符串?



    现在对于你的Java方面,它看起来也很奇怪。




    1. byte bytesTest[] = new byte[10000];
      byte bytes[] = new byte[is.read(bytesTest)];
      is.read(bytes);

    2. </code>


    首先,你要读取一些字节数(最多10000个)

    bytesTest

    数组,然后您创建一个新数组

    bytes

    长度是您刚刚读取的字节数。然后你试着再次阅读(这次不计算你有多少)

    bytes

    阵列。



    如果这适用于其他Java同行,我希望看到这一点。





    要做的就是首先发送byte []的长度,然后发送这么多字节。
    在阅读方面,请确保您读取正确的字节数。


  3. 2# Coolkid | 2019-08-31 10-32



    在pascal方面,假设’TArray’是一个字节arrray,你没有发送缓冲区的内容,你发送它的地址。此外,您不是指定数据的长度,而是指定指针的大小。试试这个:




    1. send(socket, res[0], Length(res), 0);

    2. </code>

登录 后才能参与评论