JAVA为什么关闭套接字_为什么TCP服务器套接字意外关闭?

我创建了一个Win32服务器 - 客户端应用程序,其中许多客户端连接到单个服务器,发送查询和 recv 响应 .

它在许多安装中都能正常工作,但在其他一些安装中关闭了连接 . 客户端和服务器都报告远程主机已关闭连接 . 创建连接后的套接字操作顺序如下:

Client: sends query Q1 (by calling send)

Server: recvs query Q1 and sends R1

Client: recvs R1

Client: sends query Q2

Server: recvs query Q2 and sends R2

Client: recvs R2

and so on

在某些网络中,经过一段时间,例如1小时或10分钟,

Client: Sends Q(n) successfully

Server: recvs SOCKET_ERROR and my code exits thread.

//unexpected

WSAGetLastError() at server returns 10054: An existing connection was forcibly closed by the remote host.

Client: recvs SOCKET_ERROR.

WSAGetLastError() at client also returns 10054

在服务器中,每个客户端都有一个线程 . 服务器在响应之前具有可忽略的延迟 .

为什么服务器端的函数 recv() 返回SOCKET_ERROR?谁关闭了插座?编辑:我更新了问题并将WSAGetLastErrorCode()返回值 . 为什么-1?这个问题出了什么问题?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值