C#到Android聊天客户端
本文关键字:客户端 聊天 Android | 更新日期: 2023-09-27 17:57:28
我使用C#创建了一个局域网聊天消息应用程序,该应用程序将所有运行该程序的客户端连接到我计算机上的服务器。
我现在正试图通过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]将堆(frag大小写)增加到13.455MB,分配4194308字节"
'[dalvikvm-heap]将堆(frag-case)增加到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;