C# 发送一个字符串,Java 通过套接字接收到错误的字符串

本文关键字:字符串 套接字 错误 Java 一个 | 更新日期: 2023-09-27 18:30:24

通过套接字发送和接收字符串时遇到问题。我的应用程序包括一个 c# 客户端和 java 服务器。C# 将发送一个字符串:

C# 代码:

 this.WriteByteArray(Encoding.Unicode.GetBytes(variable))
 this.WriteByteArray(Encoding.Unicode.GetBytes(value.ToString()));
 reader.ReadBoolean();

 private void WriteByteArray(byte[] buffer)
    {
        writer.Write(buffer.Length);
        if (buffer.Length > 0)
        {
            writer.Write(buffer);
        }
    }

和 Java 接收:

int lenght=readIntFromDotNet(reader);
        if(lenght>0)
        {
            byte[] buffer = new byte[lenght];
            reader.read(buffer, 0, lenght);
            return new String(buffer);
        }

问题:收到的字符串错误。

示例:C# 发送"变量",Java 接收"V a r i a b l e"

我的代码出了什么问题?

已解决:我使用了"UTF-16LE"

return new String(buffer,"UTF-16LE"); 

C# 发送一个字符串,Java 通过套接字接收到错误的字符串

也许这会为你解决问题

this.WriteByteArray(variable)
reader.ReadBoolean();
void WriteByteArray(String message)
{
    byte[] buffer = Encoding.UTF8.GetBytes(message);
    AsyncCallback ac = new AsyncCallback(SendStreamMsg);
    tcpClient.GetStream().BeginWrite(buffer, 0, buffer.Length, ac, null);
}

在爪哇方面

Charset utf8 = Charset.forName("UTF-8");
bufferReader = new BufferedReader(new InputStreamReader(sockServer.getInputStream(),utf8));
String message = br.readLine();