连接通过互联网时奇怪的数据损坏

时间:2014-01-17 18:46:05

标签: c sockets tcp

我正在使用https://github.com/gaby64/sf

当我将localy连接到127.0.0.1时,一切都很好 这是我应该获得的数据的32字节片段并且在本地获取:

00000000 00000000 00000000 00000100 00000000 00001010 01000111 01000101 01010100 01000001 01010000 01010000 01010000 01001011 01000111 00000000 11111111 11101000 01111011 00100000 00100010 01101001 01101101 01100111 00100010 00111010 00100000 01011011 00100000 01011101 00101100 00100000

这是我通过自己的外部互联网ip连接时得到的数据:

00100000 00100000 00100000 00100000 00100000 00100000 00100000 00100000 01011100 00101111 01011100 00101111 00100000 01100100 01110010 01101001 01101100 01101100 00100000 01100100 01101111 01110111 01101110 00100000 01110100 01101111 00100000 01110100 01101000 01100101 00100000 01101001

它似乎是完全混合的,并且大多数是NULL,对于84kb多部分消息是。
小消息似乎没有受到影响。

有什么我没有考虑的吗? 几个月前它正在运行,从那以后我不得不重新安装linux,所以我无法用完全相同的条件进行测试。

还有一点奇怪,使用libwebsockets提供的网页只有当我尝试通过我的外部IP访问它时才加载部分高达20kb,也可以通过localhost正常工作。

我应该提到它的所有可重复性,总是以同样的方式进行转换。

运行wire-shark来分析流量,我不是tcp / ip协议的专家,但看起来在查看数据包时一切正常。内核必须负责,我的应用程序是否有泄漏影响该内核?尽管没有来自valgrind的警告。

2 个答案:

答案 0 :(得分:0)

我终于明白了, 我不知道TCP无法穿越NAT路由器。

直接连接到我的调制解调器解决了这个问题。

答案 1 :(得分:-1)

您必须使用某种方法来检查是否收到了您发送的内容。有很多方法可以做到这一点。互联网上众所周知且容易找到的是校验和方法。搜索它。