相关疑难解决方法(0)

Java套接字API:如何判断连接是否已关闭?

我遇到了Java套接字API的一些问题.我正在尝试显示当前连接到我的游戏的玩家数量.很容易确定玩家何时连接.但是,确定玩家何时使用套接字API断开连接似乎不必要.

调用isConnected()已远程断开的套接字似乎总是返回true.同样,调用isClosed()已远程关闭的套接字似乎总是返回false.我已经读过,要实际确定套接字是否已关闭,必须将数据写入输出流并且必须捕获异常.这似乎是处理这种情况的一种非常不洁净的方式.我们不得不经常通过网络垃圾邮件垃圾邮件,以便知道套接字何时关闭.

还有其他解决方案吗?

java sockets networking client-server

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

如何检查Socket目前是否在Java中连接?

我试图找出Java TCP套接字当前是否连接,以下似乎只是告诉我套接字是否已经连接 - 而不是它当前是否仍然连接.

socket.isConnected();
Run Code Online (Sandbox Code Playgroud)

任何帮助表示感谢,谢谢.

java sockets tcp

25
推荐指数
2
解决办法
11万
查看次数

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

我的聊天应用程序连接到服务器,用户发送/接收信息.当连接改变时,例如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
查看次数

如果我的套接字已连接且未关闭,为什么要发送RST?

我有一个Android设备,使用java.net.Socket与PC无线通信.一切都很好,但如果我没有做任何事情(即没有网络使用)正好1分钟,那么当Android向PC发送数据包时,PC会收到它并发送一个ACK,但Android会以RST响应.

来自Wireshark(10.1.2.1是Android,10.1.2.11是PC)......

356 0.112470 10.1.2.1 10.1.2.11 TCP 97 34360→181 [PSH,ACK] Seq = 1 Ack = 1 Win = 4935 Len = 31 TSval = 156103571 TSecr = 320673352

359 0.000011 10.1.2.11 10.1.2.1 TCP 66 181→34360 [ACK] Seq = 1 Ack = 32 Win = 260 Len = 0 TSval = 320738236 TSecr = 156103571

360 0.000304 10.1.2.1 10.1.2.11 TCP 60 34360→181 [RST] Seq = 32 Win = 0 Len = 0

在这一点上,如果我询问套接字的成员变量,它说...

  • isConnected = true
  • isCreated = true
  • isInputShutdown = …

sockets android tcp

6
推荐指数
1
解决办法
773
查看次数

如何检查客户端是否已断开连接?

我有一个带Socket的java程序.我需要检查客户端是否已断开连接.我需要一个例子来做到这一点.我研究过,但我不明白.所以有人可以制作示例代码并解释所有内容.

对不起英语我的代码:

    package proov_server;

//SERVER 2
import java.io.*;
import java.net.*;

class server2 {
    InetAddress[] kasutaja_aadress = new InetAddress[1000];
    String newLine = System.getProperty("line.separator");
    int kliendiNr = 0;
    int kilene_kokku;
  server2(int port) {

    try {

      ServerSocket severi_pistik = new ServerSocket(port);
        System.out.println("Server töötab ja kuulab porti " + port + ".");


      while (true) {

        Socket pistik = severi_pistik.accept();
        kliendiNr++;

        kasutaja_aadress[kliendiNr] = pistik.getInetAddress();
        System.out.println(newLine+"Klient " + kliendiNr + " masinast "
                      + kasutaja_aadress[kliendiNr].getHostName() + " (IP:"
                      + kasutaja_aadress[kliendiNr].getHostAddress() + ")");

        // uue kliendi lõime …
Run Code Online (Sandbox Code Playgroud)

java

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

标签 统计

java ×4

sockets ×4

android ×2

tcp ×2

client-server ×1

exception ×1

networking ×1