Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我无法访问服务器时,如何从客户端关闭套接字连接?_Java_Sockets - Fatal编程技术网

Java 当我无法访问服务器时,如何从客户端关闭套接字连接?

Java 当我无法访问服务器时,如何从客户端关闭套接字连接?,java,sockets,Java,Sockets,说明: 上面的代码从Apache服务器创建一个套接字连接,然后将其关闭..但从客户端关闭套接字后,返回Socket.isConnected=true。。我不明白为什么?你不必为此担心。链路状态将保持打开一段时间,直到它被释放。请参见java文档中的Socket.isConnected: /*after socket.close(); socket.isConnected() returns "true" why ? */ package example.servertest; import j

说明:
上面的代码从Apache服务器创建一个套接字连接,然后将其关闭..但从客户端关闭套接字后,返回Socket.isConnected=true。。我不明白为什么?

你不必为此担心。链路状态将保持打开一段时间,直到它被释放。请参见java文档中的Socket.isConnected:

/*after socket.close(); socket.isConnected() returns "true" why ? */
package example.servertest;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketException;

public class ClientConn
{
   public void startClient()
   {
      String serverName = "localhost";
      int port = Integer.parseInt("8080");

      Socket client = null ;
      OutputStream outToServer = null ;
      DataOutputStream out = null ;
      try
      {
         System.out.println("Connecting to " + serverName
                             + " on port " + port);
         client = new Socket(serverName,port);
         System.out.println("Just connected to "
                      + client.getRemoteSocketAddress());
         outToServer = client.getOutputStream();
         PrintWriter pw = new PrintWriter(outToServer);
         pw.write("Hello ");
         pw.flush();
         pw.close();

         /*out =  new DataOutputStream(outToServer);
         out.writeUTF("Hello from "
                      + client.getLocalSocketAddress());*/
         /*InputStream inFromServer = client.getInputStream();
         DataInputStream in =
                        new DataInputStream(inFromServer);
         System.out.println("Server says " + in.readUTF());*/

      }catch(IOException e)
      {
         e.printStackTrace();
      }finally{
          try {
              /* out.flush();
              out.close();
              outToServer.flush();
              outToServer.close(); */// closes the socket
              /*client.shutdownInput();
              client.shutdownOutput();*/

              client.close();
   System.out.println("isConnected : "+client.isConnected()+"\nisClosed : "+client.isClosed()+"\nisBound : "+client.isBound());

        } catch (IOException e) {

        }
      }
   }
}

Socket.isConnected告诉您是否连接过套接字。你做到了,所以它返回真的。它不会告诉您任何关于连接状态的信息,套接字是连接的端点。只有阅读EOS才能做到这一点。

请阅读文档。不,上面的代码创建一个套接字并连接它。在JDK.com中没有“SocketConnection”这样的东西。“断开连接”与初始连接操作之外的链接状态无关。@LynxZh:我不明白您想说的关于链接状态的内容。请您详细说明一下。对不起,我理解错了文档。我认为现在我的理解是,即使套接字正在关闭,内部is connected标志仍被设置为true。并且isConnected只返回那个标志。谢谢你得到了你想要说的。但是我的问题是…正如我在问题中提到的,我没有访问服务器端代码的权限。我如何向服务器发送信号来关闭服务器端的套接字连接,或者只关闭客户端的连接而不需要发送服务器端的sny信号?当您关闭套接字时,服务器将从read或其他EOS指示中获得-1。然后,任何正确的网络程序都将关闭该套接字。
public boolean isConnected()
Returns the connection state of the socket.
Note: Closing a socket doesn't clear its connection state, which means this method will return true for a closed socket (see isClosed()) if it was successfuly connected prior to being closed.