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.