gpt4 book ai didi

java - 将消息从 java 发送到 c++,在 c++ 客户端中收到奇怪的东西

转载 作者:行者123 更新时间:2023-11-27 23:00:12 25 4
gpt4 key购买 nike

我现在已经学习 Java 将近 8 个月,并决定在业余时间学习一些 C++。

我有一个 Java 中的服务器,它等待客户端连接(C++ 中的客户端)。

当客户端连接时,我在 java 服务器上做了什么:

  1. 在键盘上输入消息。
  2. 将文本(字符串)转换为字节。
  3. 将字节数组发送到 C++ 客户端。

C++ 客户端在连接时正在做什么:

  1. 声明一个名为“buff”的字符数组。
  2. 从 Java 服务器接收消息。
  3. 如果接收时没有错误,则打印消息。

Java中的相关代码:

String message;
byte[] byteArray = new byte[1024];

while (true) {
System.out.println("Enter message: ");
message = sc.nextLine(); // Enter message
byteArray = message.getBytes("UTF-8"); // Get bytes of message
out.write(byteArray); // Send the Message
}

C++中的相关代码:

std::cout << "Connected!";

while (true)
{
char buff[1024];

if (what = recv(u_sock, buff, sizeof(buff), 0) < 0)
{
cout << "Error receiving message " << WSAGetLastError() << endl;
}
else
{
cout << "Message: " << buff << endl;
}
}

实际问题:当我从 Java 发送字符串“asd”时,我收到了 C++ 中的“asd”、笑脸和文本 winsock2.0。有时我只收到以前的消息而不是当前发送的消息。可能是什么问题? 当我尝试从 C++ 客户端向 Java 服务器发送消息时,它成功了。

最佳答案

接收到的数据不是以 NULL 结尾的。要解决这个问题,您应该以 NULL 终止它们:

if ((what = recv(u_sock, buff, sizeof(buff)-1, 0)) < 0)
{

}
else
{
buff[what] = 0;
cout << buff << endl;
}

关于java - 将消息从 java 发送到 c++,在 c++ 客户端中收到奇怪的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28510842/

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