2010-01-10 246 views
0

我有两部手机连接到一个Wifi接入点,两个IP都在专用范围内。 其中一部电话有一个HTTP服务器在其上运行,另一部电话就像一个客户端。客户端将GET请求数据发送到服务器,作为URL查询字符串中的名称/ 值对。目前服务器只接收查询字符串时发送HTTP.OK。Http请求响应调试

正在发生的事情是,客户端可能不是静止的,也许走动,因此可能无法为它在范围之内总是由于我不是让所有从发送的数据的无线网络连接 点客户端在服务器端。 我想确保发送的所有数据实际上都是由服务器接收的。

应该实施什么样的纠错?我可以检查一些相关的HTTP错误代码或类似的东西吗?

回答

1

如果HTTP服务器不接收在GET请求整个查询字符串,则HTTP请求不可能是有效的,因为这些参数是所述请求的第一行。

服务器将无法处理请求在这种情况下可能会返回状态代码400(错误请求)。

如果您的客户端收到此(这似乎不太可能,这将无法发送请求,尚未收到回应),那么你就知道重传。通常,TCP连接的属性(如自动重传,校验和和超时)应该是您成功交付或确定故障所需的全部。

+0

很可能,任何服务器都不会响应排除标头结尾(2个CRLF)的请求。你唯一的回应将是没有回应(即超时)。 – SpliFF 2010-01-10 02:01:53

+0

嗯。 'echo“GET/HTTP/1.0”| nc httpd.apache.org 80'(或microsoft.com)直接给我一个400错误。 – 2010-01-10 02:08:10

+0

@ Christopher:这意味着如果我得到一个400代码会被认为是服务器得到错误或格式错误的查询字符串?如果服务器关闭,我仍然会得到400. – 2010-01-10 02:57:48

1

您需要检查在客户端上超时。这取决于所用的过程/语言。

编辑:http://wiki.forum.nokia.com/index.php/Using_Http_and_Https_in_Java_ME

看起来你只需设置超时时间,赶上IO错误。

+0

我该怎么做?我已经在JavaME中编写了应用程序 – 2010-01-10 02:52:15

+0

我不做java,你必须检查你的HTTP请求对象的文档。想必会发生错误,你需要赶上它,否则返回一些类型的状态码。 – SpliFF 2010-01-10 06:08:21

1

不成熟的优化。

连接完整性已经在网络栈的较低部分处理。因此,如果请求中间有任何丢失(假设它跨越多个单个数据包),则TCP堆栈会在将数据传递到服务器之前尝试恢复它们。

如果您要证实这一点,那么只需添加一个校验和查询的最后一部分。

C.

+0

尽管在客户端套接字上使用一个短保持活动和超时将是一个好主意。 – symcbean 2010-01-11 12:50:08