【发布时间】:2019-02-26 09:21:32
【问题描述】:
问题是GetBufferSize 方法,我发送一个大小为 40 的缓冲区,它返回一个奇怪的数字 54124。
为什么java int byte code和C# int byte code不一样?
JAVA 客户端
mBufferOut = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), UTF8)), true);
private void sendMessage(final String message) {
if (mBufferOut != null && message != null) {
try {
Log.d("_TAG", "Message length: " + Integer.toString(message.length()));
Log.d("_TAG", "Sending: " + message);
mBufferOut.print(message.length());
mBufferOut.flush();
mBufferOut.print(message);
mBufferOut.flush();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
上面的代码发送了两条消息:第一个是缓冲区大小,第二个是数据本身。
C# 服务器
private void Read() {
int size = GetBufferSize();
byte[] myReadBuffer = new byte[size];
int numberOfBytesRead = 0;
string str = "";
do
{
numberOfBytesRead = networkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
str = Encoding.UTF8.GetString(myReadBuffer, 0, numberOfBytesRead);
} while (networkStream.DataAvailable);
}
private int GetBufferSize()
{
byte[] myReadBuffer = new byte[4];
int numberOfBytesRead = 0;
do
{
numberOfBytesRead = networkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
} while (networkStream.DataAvailable);
if (numberOfBytesRead > 0)
{
return BitConverter.ToInt32(myReadBuffer, 0);
}
else
{
return 0;
}
}
有什么想法吗?
【问题讨论】:
-
我建议您将发送的字节和接收的字节视为单独的字节。检查它们是否相同。弄清楚它们如何代表您发送的人类可读的值。弄清楚它们如何代表您收到的错误值。