java nio 断开连接_JAVA NIO写服务端判断客户端断开连接的方法

不过这个方法有个问题,就是

1、能侦测到客户端主动断开与服务端的连接,但是如果客户端掉线,服务端就接收不到了。。

2、如果处于等待状态,就会出问题。比如说客户端的数据还没有准备好发送,这样你就已经关闭了链接。

最近学习NIO,一直有个疑问,怎么知道客户端断开了连接.

在上网找和试验之后发现下面的方法可以实现这个目的.

我们一般会在服务端有个大的WHILE,然后在里面循环判断是否有客户端连接

ssc = (ServerSocketChannel) sk.channel();

sc = ssc.accept();

System.out.println("客户端连接..."

+ sc.socket().getRemoteSocketAddress());

如果有连接,则注册读入的键

sc.configureBlocking(false);

sc.register(selector, SelectionKey.OP_READ);

然后我们就可以在有读入的时候被通知到并及时处理,我们可以在此时加入一个判断,如果读入的RECCOUNT=-1,

则可以判为断开.

ByteBuffer bf = ByteBuffer.allocate(6);         SocketChannel sc = (SocketChannel) sKey.channel();         buffer.clear();         reccount = sc.read(buffer);         if(reccount == -1){             System.out.println("断开..."                      + sc.socket().getRemoteSocketAddress());                         sc.close();         }

以下是一个简单的Java实现WebSocket客户端服务端发送指令及接收服务端返回信息并打印出来的示例代码: ```java import java.net.URI; import java.net.URISyntaxException; import java.nio.ByteBuffer; import java.util.Scanner; import org.java_websocket.client.WebSocketClient; import org.java_websocket.handshake.ServerHandshake; public class WebSocketExample extends WebSocketClient { public WebSocketExample(URI serverUri) { super(serverUri); } @Override public void onOpen(ServerHandshake handshakedata) { System.out.println("Connected to server"); } @Override public void onClose(int code, String reason, boolean remote) { System.out.println("Disconnected from server"); } @Override public void onMessage(String message) { System.out.println("Received message: " + message); } @Override public void onMessage(ByteBuffer message) { // Handle binary message if needed } @Override public void onError(Exception ex) { ex.printStackTrace(); } public static void main(String[] args) throws URISyntaxException { WebSocketExample client = new WebSocketExample(new URI("ws://localhost:8080/")); client.connect(); Scanner scanner = new Scanner(System.in); while (true) { String command = scanner.nextLine(); if (command.equals("exit")) { client.close(); break; } client.send(command); } } } ``` 在这个示例中,我们使用了Java-WebSocket库来实现WebSocket客户端。我们创建了一个WebSocketExample类,继承WebSocketClient类,并实现了几个回调方法: - onOpen:当连接到服务器时触发 - onClose:当与服务器断开连接时触发 - onMessage:当接收到服务器发送的文本消息时触发 - onMessage(ByteBuffer message):当接收到服务器发送的二进制消息时触发 - onError:当出现错误时触发 在main方法中,我们创建了一个WebSocketExample实例并连接到服务器。然后,我们使用Scanner来读取用户输入的命令,并使用WebSocketExample实例的send方法将命令发送到服务器。如果用户输入“exit”,我们将关闭WebSocket连接并退出程序。 这个示例只是一个简单的WebSocket客户端,你需要根据你的需求来修改代码,例如处理服务器返回的二进制消息,或者处理错误情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值