我通过TCP套接字异步发送数据。我目前连接到本地计算机上的SMSC模拟器,只是为了检查所有数据包是否正确创建,然后再连接到真实的数据包。
我只发送一次PDU,并且SMSC完美地接收它,并生成响应PDU并将其发回,但之后,模拟器上弹出一条错误消息,指出它无法接收100条消息。问题是我只发送一次,没有循环运行,不断发送消息,我已经调试并检查它只发送一次。
我认为问题可能在于创建PDU。我首先创建一个大小为1024的字节数组,然后根据需要填充。填充时,它不会使用数组的整个空间。所以我在想,当模拟器收到它时,从数组中检索数据,然后在实际数据作为新消息之后读取数组中的'0'字节,因为它给了我一条响应消息,说明数据无效。
无论如何要避免这种情况,或者我只是在这里遗漏了什么?据我说,当在字节数组中接收值时,你应该只使用必要的编码来检索数据,其余的'0'字节应该被忽略?
很抱歉,如果我的问题含糊不清。
答案 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;
}