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