我使用 C# 创建了一个 LAN 聊天消息传递应用程序,它将运行该程序的所有客户端连接到我计算机上的服务器。
我现在正尝试通过 Xamarin Studio 将此应用程序转换为适用于 Android 设备。
测试时,设备会正确连接到服务器,因为它可以发送一条消息(表示设备已登录),然后将该消息广播给其他客户端。
但是,一旦应用程序发送此消息,程序就会立即关闭。
在聊天客户端的桌面版本中,我使用代码(在另一个线程上运行):
NetworkStream serverStream = default(NetworkStream);
private void getMessage()
{
while (this.keepOpen)
{
Console.WriteLine("getMessage");
serverStream = clientSocket.GetStream();
int buffSize = 0;
byte[] inStream = new byte[clientSocket.ReceiveBufferSize];
buffSize = clientSocket.ReceiveBufferSize;
try
{
Console.WriteLine("Read stream");
serverStream.Read(inStream, 0, buffSize);
Console.WriteLine ("Final test");
}
catch
{
Console.WriteLine("failed to read stream");
}
string returndata = Encoding.ASCII.GetString(inStream);
readData = "" + returndata;
message();
}
}
这在第一次调用时起作用,因为显示“最终测试”行。但是,在此之后,当该方法再次进入此阶段(因为它处于永无止境的循环中)时,我收到一条错误消息:
'[dalvikvm-heap] 将堆( fragment 情况)增加到 13.455MB 以分配 4194308 字节'
'[dalvikvm-heap] 将堆( fragment 情况)增加到 21.444MB 以分配 8388612 字节'
“最终测试”行没有显示,因此“serverStream.Read(inStream, 0, buffSize);”行正在崩溃应用程序。我曾尝试使用 .Flush() 和 .Close(),但这些都不起作用。
我的代码的发送部分使用“serverSocket.Write()”完美运行,因为其他客户端可以接收消息,那么为什么从服务器读取数据会使应用程序崩溃?
P.S 这是我的第一个 Android 应用程序,所以我想使用一种我更熟悉的语言,而不是尝试从头开始使用 Java。
提前致谢。
最佳答案
意识到这个错误是因为我在尝试发送消息时分配了太多内存。
简单的改变
byte[] inStream = new byte[clientSocket.ReceiveBufferSize];
buffSize = clientSocket.ReceiveBufferSize;
到
byte[] inStream = new byte[4096];
buffSize = 4096;
关于C#转安卓聊天客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22939344/