Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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
Android 如果isConnected返回true,为什么Exeption说它不是';没有连接?_Android_Sockets_Bluetooth_Kotlin - Fatal编程技术网

Android 如果isConnected返回true,为什么Exeption说它不是';没有连接?

Android 如果isConnected返回true,为什么Exeption说它不是';没有连接?,android,sockets,bluetooth,kotlin,Android,Sockets,Bluetooth,Kotlin,我正在编写一个android应用程序,它应该通过蓝牙发送文件。现在我只是想发短信。发送设备似乎发送正确,并且接收设备正在接收来自其他设备的连接。接收器能够从侦听服务器套接字获取套接字,并从该套接字获取输入流。我的问题是它无法从输入流中读取数据。真正让我困惑的是,我得到的异常表明相关套接字已关闭,但是socket.isConnected()在尝试读取之前和异常发生之后都返回true。这怎么可能呢?此代码如何: class ReceiveThread(val socket: BluetoothSoc

我正在编写一个android应用程序,它应该通过蓝牙发送文件。现在我只是想发短信。发送设备似乎发送正确,并且接收设备正在接收来自其他设备的连接。接收器能够从侦听服务器套接字获取套接字,并从该套接字获取输入流。我的问题是它无法从输入流中读取数据。真正让我困惑的是,我得到的异常表明相关套接字已关闭,但是socket.isConnected()在尝试读取之前和异常发生之后都返回true。这怎么可能呢?此代码如何:

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
对连接都是致命的。因此,当引发异常时,连接正在关闭?但是这个异常不是因为连接关闭而发生的吗?请给我解释一下。这将非常有帮助。如果您正在发送,则连接已关闭,并且已被网络检测到,下次发送时会向您报告。如果您在接收中阻塞,则连接刚刚断开。