C#和Java之间的编码问题TCP通信

时间:2019-02-22 08:34:36

标签: java c# android encoding tcp

我只是试图将int值从我的Android应用发送到C#服务器,但是我搞砸了,因为由于编码问题,服务器上接收到的值无法转换为int。 / p>

Android应用正在发送int值(n):

OutputStream oos = new ObjectOutputStream(socket.getOutputStream());
int n = 1;
oos.write((""+n).getBytes());
oos.flush();

我的TCP C#服务器正在读取:

byte[] message = new byte[4096];
int bytesRead=0;
bytesRead = clientStream.Read(message, 0, message.Length);
string dataReceived = System.Text.Encoding.ASCII.GetString(message);
  

dataReceived为“ ?? \ 0 \ u0005w \ u00011 \ 0 \ 0 ....... 0 \ 0”

2 个答案:

答案 0 :(得分:0)

无需将OutputStream包裹在ObjectOutputStream中。

Java客户端:

OutputStream oos = socket.getOutputStream();
int n = 1;
oos.write((""+n).getBytes());
oos.flush();

C#服务器:

byte[] message = new byte[4096];
int bytesRead=0;
while (true)
{
    bytesRead = 0;
    try
    {
        bytesRead = clientStream.Read(message, 0, 4096);
    }
    catch
    {
        break;
    }

    if (bytesRead == 0)
    {
        break;
    }
    //message has successfully been received
    ASCIIEncoding encoder = new ASCIIEncoding();
    string msg = encoder.GetString(message, 0, bytesRead);
    if (!string.IsNullOrEmpty(msg.Replace("\r\n", "")))
    {
        int q = -1;
        if (int.TryParse(msg, out q))
        {
            queue.Enqueue(q);
        }
    }
}

答案 1 :(得分:0)

您在此处使用其他编码。 Java String.getBytes()默认为Unicode UTF-16,并且服务器端无法将其读取为ASCII。

因此更改为

oos.write((""+n).getBytes("ISO-8859-1"));