gpt4 book ai didi

Java - freepascal 通信

转载 作者:行者123 更新时间:2023-12-04 06:32:30 33 4
gpt4 key购买 nike

我在 java 和 freepascal(lazarus) 应用程序之间的通信有问题。我使用套接字。它们正确连接。一切都很顺利,直到我想从一个应用程序向另一个应用程序发送一些东西。在java而不是“abc”中,我有随机字符。代码如下:

java :

ServerSocket serverSocket = new ServerSocket(1025);  
Socket client = serverSocket.accept();
InputStream is = client.getInputStream();
byte bytesTest[] = new byte[10000];
byte bytes[] = new byte[is.read(bytesTest)];
is.read(bytes);
String textReceived = new String(bytes, "UTF-8");
System.out.println(textReceived);

计划:
connect(socket, socket_info, SizeOf(socket_info));  
S := 'abcd';
res := UTF8Bytes(S);
send(socket, res, sizeof(res), 0);
send(socket, res, sizeof(res), 0);

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;

最佳答案

在对 Pascal 一无所知的情况下(我大约 12 年前使用它),您的 UTF8Byte 函数看起来很可疑。

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;

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

另外,你在这里做什么?
S := 'abcd';
res := UTF8Bytes(S);
send(socket, res, sizeof(res), 0);
send(socket, res, sizeof(res), 0);

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

现在对于您的 Java 方面,它看起来也很奇怪。
byte bytesTest[] = new byte[10000];
byte bytes[] = new byte[is.read(bytesTest)];
is.read(bytes);

首先,您将一些字节数(最多 10000)读入 bytesTest数组,然后创建一个新数组 bytes长度是您刚刚读取的字节数。然后你尝试在 bytes 中再次阅读(这次不计算你有多少)。大批。

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

要走的路是首先发送你的字节 [] 的长度,然后发送这么多字节。
在读取方面,请确保读取正确的字节数。

关于Java - freepascal 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5234497/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com