tcp连接失败java,TCP连接阶段失败(从JAVA客户端调用Web服务到C#-server)

所以我有一个Android应用程序调用Web服务(C#),我从一开始就注意到它经常发生,但并非总是这样,它在返回答案时非常缓慢,或者请求完全失败。

起初我认为它与后端代码有关,即服务器需要很长时间来处理请求并返回结果。我现在排除了这种可能性,因为处理过程只需要大约40毫秒。然而,我注意到web服务代码有时不被调用,或者需要很长时间来执行代码。

于是我启动了Wireshark并查看了传输的数据包,并发现了我认为TCP连接错误的一个阶段。下面的第一张图片显示了错误的连接。

它看起来像这样:

客户端:SYN

服务器:SYN ACK

客户端:SYN ACK

如图所示:

h3x22.png

但它应该是这样的:

客户端:SYN

服务器:SYN,ACK

客户:ACK

当我再次尝试时,只需从Android应用程序再次调用webservie(无需重新启动或任何操作),我就可以得到正确的步骤,并按照预期做出响应。这里是一个Wireshark图像:

LyosU.png

我很确定这是我看到的“非常慢的web服务”的问题,因为在接收答案之前通常会有很长的延迟,有时(如在第一张图片中),根本没有响应。 Wireshark还表明,它可以“停止”10-20秒的答案,并且在实际重新使用Web服务代码之前。

没有网络问题,因为它全部在本地WLAN上运行(计算机作为热点,没有其他人连接到它)。 Android设备是运行2.3.3的Samsung S2,Web服务是运行自托管ServiceHost的.NET 3.5。

有任何想法吗?

- - - - 附加信息 - - - - - -

这里是我如何从JAVA代码调用我的web服务(方法是GET):

private void executeRequest(HttpUriRequest request, String url)

{

HttpClient client = new DefaultHttpClient();

try

{

httpResponse = client.execute(request);

responseCode = httpResponse.getStatusLine().getStatusCode();

message = httpResponse.getStatusLine().getReasonPhrase();

HttpEntity entity = httpResponse.getEntity();

if (entity != null) {

InputStream instream = entity.getContent();

response = convertStreamToString(instream);

// Closing the input stream will trigger connection release

instream.close();

}

} catch (ClientProtocolException e) {

client.getConnectionManager().shutdown();

e.printStackTrace();

} catch (IOException e) {

client.getConnectionManager().shutdown();

e.printStackTrace();

}

}这是如何在.NET中定义Web服务方法:

[OperationContract]

[WebGet(UriTemplate = "PutMessage?jsonString={jsonString}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat= WebMessageFormat.Json)]

string PutMessage(string jsonString);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值