相关疑难解决方法(0)

如何检测远程侧插座关闭?

如何检测是否Socket#close()已在远程端的套接字上调用?

java sockets networking tcp

82
推荐指数
3
解决办法
14万
查看次数

c ++如何使用select查看套接字是否已关闭

有人可以给我一个如何使用select()来查看客户端是否已关闭套接字连接的示例?

仅供参考.我正在使用linux.

谢谢!

c++ sockets linux select

19
推荐指数
2
解决办法
1万
查看次数

为什么我写的这个服务器没有检测到客户端已关闭套接字呢?

在客户端,我有一个

close(sockfd)
Run Code Online (Sandbox Code Playgroud)

其中sockfd是连接到服务器的套接字.在服务器中我得到了这个:

if (sockfd.revents & POLLERR ||
    desc_set[i].revents & POLLHUP || desc_set[i].revents & POLLNVAL) { 
  close(sockfd.fd); 
  printf("Goodbye (connection closed)\n");
}
Run Code Online (Sandbox Code Playgroud)

其中sockfd是struct pollfd,而sockfd.fd是客户端套接字的文件描述符.

当客户端像我放在那里那样关闭套接字时,服务器似乎没有用第二个代码(desc_set [i] .revents&POLLHUP等)检测它.

有谁知道这是什么问题?

c sockets networking

9
推荐指数
2
解决办法
1416
查看次数

连接发生变化时套接字不会断开连接

我的聊天应用程序连接到服务器,用户发送/接收信息.当连接改变时,例如3g-> wifi,wifi-> 3g,丢失数据连接等,套接字有时会在断开连接之前保持连接数年.在此期间,无法判断连接是否仍处于活动状态,似乎消息发送得很好.其他时候,在发送消息时,它会抛出IO错误并断开连接.

除了实现代码来检测连接更改并正确地重新连接之外,是否可以让套接字在连接发生变化时立即抛出IO异常?

编辑:我正在使用以下代码进行连接:

Socket sock = new Socket();
sock.connect(new InetSocketAddress(getAddress(), getPort())), getTimeout());
//get bufferedReader and read until BufferedReader#readLine() returns null
Run Code Online (Sandbox Code Playgroud)

我没有使用setSoTimeout,因为根据远程服务器的配置,数据可能无法长时间传输.

java sockets android exception

8
推荐指数
1
解决办法
2879
查看次数

标签 统计

sockets ×4

java ×2

networking ×2

android ×1

c ×1

c++ ×1

exception ×1

linux ×1

select ×1

tcp ×1