- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Java NIO 做客户端服务器 Java 程序。基本上对于服务器代码,我取自 here 。对于客户端,我取自 here 。现在看来不错。我现在想要实现的是将数据从客户端发送到服务器,服务器将数据发送回客户端。
但是我的逻辑有问题。假设我放置了“AMessage”,那么我必须放置“BMessage”才能从服务器检索“AMessage”。我进行了调试,似乎我的 key.isConnectable()
始终返回 true
。我尝试设置关键兴趣,重新注册它,但我还没有找到任何解决方案。
我已经尝试过这个 key.interestOps(0);
, myChannel.register(selector, SelectionKey.OP_READ);
,但似乎什么也没发生。 isConnectable
仍然返回 true。我发现其他人告知的一些问题说这是本地主机问题。我不知道。但现在我在本地主机上运行服务器和客户端。有人有什么想法吗?
谢谢:)
编辑:这是我的代码的一部分:-
if (key.isConnectable()) {
if (myChannel.isConnectionPending()) {
try{
myChannel.finishConnect();
}
catch(IOException e){
System.out.println(e);
}
System.out.println("Status of finishCOnnect(): " + myChannel.finishConnect() );
System.out.println("Connection was pending but now is finished connecting.");
}
ByteBuffer bb = null;
ByteBuffer incomingBuffer = null;
Scanner input = new Scanner(System.in); // Declare and Initialize the Scanner
while (true) {
System.out.println("Status isReadable is " + key.isReadable() + " and isWritable is " + key.isWritable() +
" and isConnectable is " + key.isConnectable());
readMessage(key); //read if server send data
//send data to server here
String inputFromClient = input.nextLine(); //Get the input from client
System.out.println("debugging after get input...");
bb = ByteBuffer.allocate(inputFromClient.length()); //Allocate buffer size according to input size
byte[] data = inputFromClient.getBytes("UTF-8"); //convert the input to form of byte
bb = ByteBuffer.wrap(data); //wrap string inside a buffer
myChannel.write(bb); //Write the buffer on the channel to send to the server
bb.clear();
}
}
最佳答案
if (key.isConnectable()) {
if (myChannel.isConnectionPending()) {
try{
myChannel.finishConnect();
}
catch(IOException e){
System.out.println(e);
}
System.out.println("Status of finishCOnnect(): " + myChannel.finishConnect() );
System.out.println("Connection was pending but now is finished connecting.");
}
这里有几个问题。
isConnectionPending()
测试是多余的。它必须处于待处理状态,否则您将不会获得该事件,但您可能会通过测试它来诱惑普罗维登斯。摆脱这个测试。
您没有通过 finishConnect()
调用执行正确的操作。如果finishConnect()
返回true那么就可以取消注册OP_CONNECT
并注册OP_READ
或其他。如果返回 false,则不行。
如果finishConnect()
抛出异常,则连接失败,您必须关闭 channel 。
您调用 finishConnect()
两次:一次在 try
block 中,一次在记录状态时。摆脱第二个调用并使用第一个调用的结果(如果有)。我将重新组织它以记录(a)来自 finishConnect()
的成功,(b) 来自 finishConnect()
的失败,以及 (c) 来自 finishConnect() 的异常
,全部分开。
您的最终 System.out.println()
在这三种情况中的两种情况下只是一个谎言。不要告诉自己一些你不知道是真的事情。它只是混淆了图片。如上所述分别记录每个案例。
您假设连接可读,而不是测试 isReadable()。
关于Java NIO isConnectable 始终返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15676904/
我有 3 个使用蓝牙连接/通信的 Activity 。 在我的第一页上,我已经连接到蓝牙设备。当我转到另一个 Activity 时,我尝试使用以下代码: BluetoothSocket btSocke
我已经创建了一个 Android 应用程序,如果我的 Android 有一个蓝牙连接到我的电脑并且我关闭了我的电脑,isConnected 仍然返回 true。有人知道这是否可以修复吗? 不知道有没有
isConnected 应该是一个变量来测试数据库连接是否成功。现在,在我的 DatabaseTest 类中,我想断言这个 isConnected 变量。 isConnected 在数据库对象中声明,
这个问题在这里已经有了答案: Java socket API: How to tell if a connection has been closed? (9 个回答) 关闭 1 年前。 我有一个使
在我的缓存 AddItem 和 GetItem 方法中,我在继续之前检查到 redis 的连接是否存在,是 ConnectionMultiplexer.IsConnected昂贵的方法调用?还是我应该
这个问题已经有答案了: How can a socket be both connected and closed? (1 个回答) Java socket API: How to tell if a
我正在使用 Java NIO 做客户端服务器 Java 程序。基本上对于服务器代码,我取自 here 。对于客户端,我取自 here 。现在看来不错。我现在想要实现的是将数据从客户端发送到服务器,服务
我正在尝试查找何时何地 CH34xAndroidDriver.isConnected() 值变为真。我试图找出并在 toast 中展示它的值(value)。谁能解释清楚。 public class U
我正在尝试在我的游戏中实现排行榜。我写了这段代码: GoogleApiClient mGoogleApiClient; mGoogleApiClient = new GoogleApiClient.B
我在我的应用程序中使用 NetInfo,以检查它是否已连接到互联网。 NetInfo.isConnected.fetch().then( (isConnected) => { console.
测试用例: 在连接开始之前它应该返回false 连接被另一端关闭返回false 连接被客户端关闭返回false 即使没有可用数据也存在连接 return true class MyConnection
我正在尝试检测蓝牙设备当前是否连接到使用 API 14 或更高版本的 Android 设备。似乎我应该能够使用 BluetoothSocket.isConnected() 方法,但无论我做了什么,到目
我正在尝试将我已经制作的 Android 应用程序复制到 iOS。我正在尝试制作一个 BLE 应用程序,我的 iOS 设备将能够看到并连接到 BLE 设备并获取 RSSI(我真的不关心消息和其他数据)
我知道这是一个愚蠢的问题,但这里是。 我有一个使用 isConnected 的旧应用程序。现在我收到警告说它已被弃用。我可以删除这行代码而不会产生任何后果,或者我该如何处理。很抱歉这么密集。 这是来自
当我从真实设备上关闭互联网连接时,它没有检测到我处于离线状态,但是当再次上线时,它会将值返回为 true。 import React from 'react'; import { SafeArea
我正在使用 Spring 3.1 开发 Hibernate4 示例。 在我的示例中,当我打印 sessionFactory.getCurrentSession().isOpen() 时在控制台上打印
自从更新了我的 SDK 管理器包后,我的 google play 服务一直无法正常工作。 这导致我运行 5.0 的三星 S5、运行 5.0.1 的 HTC One_M8 和运行 6.0(Android
我正在使用 Swift 开发一个 iOS 应用程序,它通过套接字连接到 Android 设备。我已经实现了 Starscream 并且能够连接到其他设备。我的问题是,当我在 websocketDidC
我使用 gar 在 this StackOverflow post 中的回答检查互联网连接可用性。但是,我不确定它是否正常工作。如果我关闭 WiFi 和移动数据连接并运行应用程序,NetworkInf
我正在使用 Google Play 游戏服务和 Xamarin 为 Android 开发游戏。我正在使用 Genymotion Android 模拟器进行测试。我遇到了一个似乎是 Google Pla
我是一名优秀的程序员,十分优秀!