Android 如果isConnected返回true,为什么Exeption说它不是';没有连接?
我正在编写一个android应用程序,它应该通过蓝牙发送文件。现在我只是想发短信。发送设备似乎发送正确,并且接收设备正在接收来自其他设备的连接。接收器能够从侦听服务器套接字获取套接字,并从该套接字获取输入流。我的问题是它无法从输入流中读取数据。真正让我困惑的是,我得到的异常表明相关套接字已关闭,但是socket.isConnected()在尝试读取之前和异常发生之后都返回true。这怎么可能呢?此代码如何:Android 如果isConnected返回true,为什么Exeption说它不是';没有连接?,android,sockets,bluetooth,kotlin,Android,Sockets,Bluetooth,Kotlin,我正在编写一个android应用程序,它应该通过蓝牙发送文件。现在我只是想发短信。发送设备似乎发送正确,并且接收设备正在接收来自其他设备的连接。接收器能够从侦听服务器套接字获取套接字,并从该套接字获取输入流。我的问题是它无法从输入流中读取数据。真正让我困惑的是,我得到的异常表明相关套接字已关闭,但是socket.isConnected()在尝试读取之前和异常发生之后都返回true。这怎么可能呢?此代码如何: class ReceiveThread(val socket: BluetoothSoc
class ReceiveThread(val socket: BluetoothSocket):Thread() {
var count:Int = 0
var bytes:Int = 0
val buffer:ByteArray = ByteArray(1024)
val byteList = mutableListOf<Byte>()
val inStream:InputStream
init {
inStream = socket.inputStream
}
override fun run() {
BluetoothService.log("Begin ${BTS_Constants.THREAD_RECEIVE}")
BluetoothService.log("preparing to read data (socket connected): ${socket.isConnected}")
name = BTS_Constants.THREAD_RECEIVE
try {
bytes = inStream.read(buffer)
}catch (e:Exception){
BluetoothService.log("error reading from stream (socket connected):${socket.isConnected}", e)
BluetoothService.state = BTS_Constants.STATE_NONE
}
if (byteList.size>0) BluetoothService.log("data read: ${byteList.get(0) as Char}") else BluetoothService.log("failed to get")
}
fun cancel() = inStream.close()
}
如果套接字已关闭,为什么返回true?我如何追踪我的插座关闭的位置?请帮助我理解这一点 isConnected()
告诉您套接字的状态。如果您曾经连接或接受它,它将返回true。即使你关上它。当对等机断开连接时,它不会神奇地变成错误
异常是告诉您连接的状态。isConnected()
告诉您套接字的状态。如果您曾经连接或接受它,它将返回true。即使你关上它。当对等机断开连接时,它不会神奇地变成错误
例外情况是告诉您连接的状态。我也有同样的问题
我用这个代码解决了这个问题
socket.socket.IsConnected
第一个socket
是连接到服务器的可变套接字
第二个socket
是你的服务器,你可以得到任何你想要的东西
并且,IsConnected
将通知您是否与服务器连接我也遇到了同样的问题
我用这个代码解决了这个问题
socket.socket.IsConnected
第一个socket
是连接到服务器的可变套接字
第二个socket
是你的服务器,你可以得到任何你想要的东西
并且,IsConnected
将通知您是否与服务器建立了连接我是否可以跟踪连接状态?这样我就可以看到连接何时关闭了?类似于isConnected的东西,可能只是连接状态?或者以任何其他方式找到正在关闭连接的位置?您已经找到了。执行I/O时会引发异常。除了SocketTimeoutException
之外的任何IOException
对连接都是致命的。因此,当引发异常时,连接正在关闭?但是这个异常不是因为连接关闭而发生的吗?请给我解释一下。这将非常有帮助。如果您正在发送,则连接已关闭,并且已被网络检测到,下次发送时会向您报告。如果您在接收中被阻塞,则连接刚刚断开。我是否可以跟踪连接的状态?这样我就可以看到连接何时关闭了?类似于isConnected的东西,可能只是连接状态?或者以任何其他方式找到正在关闭连接的位置?您已经找到了。执行I/O时会引发异常。除了SocketTimeoutException
之外的任何IOException
对连接都是致命的。因此,当引发异常时,连接正在关闭?但是这个异常不是因为连接关闭而发生的吗?请给我解释一下。这将非常有帮助。如果您正在发送,则连接已关闭,并且已被网络检测到,下次发送时会向您报告。如果您在接收中阻塞,则连接刚刚断开。