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更舒服的语言。

提前谢谢。

C#到Android聊天客户端

意识到这个错误是因为我在尝试发送消息时分配了太多内存。

简单更改

byte[] inStream = new byte[clientSocket.ReceiveBufferSize];
buffSize = clientSocket.ReceiveBufferSize;

byte[] inStream = new byte[4096];
buffSize = 4096;