TCP通信行为

时间:2012-06-25 13:07:47

标签: c#-4.0

我通过TCP套接字异步发送数据。我目前连接到本地计算机上的SMSC模拟器,只是为了检查所有数据包是否正确创建,然后再连接到真实的数据包。

我只发送一次PDU,并且SMSC完美地接收它,并生成响应PDU并将其发回,但之后,模拟器上弹出一条错误消息,指出它无法接收100条消息。问题是我只发送一次,没有循环运行,不断发送消息,我已经调试并检查它只发送一次。

我认为问题可能在于创建PDU。我首先创建一个大小为1024的字节数组,然后根据需要填充。填充时,它不会使用数组的整个空间。所以我在想,当模拟器收到它时,从数组中检索数据,然后在实际数据作为新消息之后读取数组中的'0'字节,因为它给了我一条响应消息,说明数据无效。

无论如何要避免这种情况,或者我只是在这里遗漏了什么?据我说,当在字节数组中接收值时,你应该只使用必要的编码来检索数据,其余的'0'字节应该被忽略?

很抱歉,如果我的问题含糊不清。

1 个答案:

答案 0 :(得分:0)

问题确实是阵列中的0字节。

我在阅读Stack Overflow上发布的文章后,通过从数组中删除0个字节来解决它:

以下是解决方案:

    private byte[] CleanArray(byte[] array)
    {
        int i = array.Length - 1;

        while (array[i] == 0)
        {
            i--;
        }

        byte[] cleanedArray = new byte[i + 1];
        Array.Copy(array, cleanedArray, i + 1);

        return cleanedArray;
    }