我只是试图将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”
答案 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"));