Android Kotlin-socket.write或getOutputStream,flush关闭连接
又是一天,又是一个扫兴的日子。 我一直试图通过TCP套接字发送ByteArray并获得响应,但每当我以任何形式写入套接字时,它都不会等待响应 我设置了一个包发送器应用程序,它在端口上等待连接,当来自android设备的连接发生时,它应该返回一些字符串 到目前为止,我有两段代码…第一段发送但不接收,第二段不发送任何数据但触发响应。。。我很困惑 有人能帮我解决这个问题吗 好的。。我看到两个片段很混乱,所以这里是我现在关注的一个Android Kotlin-socket.write或getOutputStream,flush关闭连接,android,sockets,kotlin,Android,Sockets,Kotlin,又是一天,又是一个扫兴的日子。 我一直试图通过TCP套接字发送ByteArray并获得响应,但每当我以任何形式写入套接字时,它都不会等待响应 我设置了一个包发送器应用程序,它在端口上等待连接,当来自android设备的连接发生时,它应该返回一些字符串 到目前为止,我有两段代码…第一段发送但不接收,第二段不发送任何数据但触发响应。。。我很困惑 有人能帮我解决这个问题吗 好的。。我看到两个片段很混乱,所以这里是我现在关注的一个 Thread(Runnable {
Thread(Runnable {
try {
d("TEST > Connect 2> IP:", IP.toString())
d("TEST > Connect 2> Port:", Port.toString())
d("TEST >> FINAL OUT 2>> ", hex)
val client = Socket(IP.toString(), Port)
//client.outputStream.write(hexOut(hex!!))
var pw = PrintWriter(client.getOutputStream());
pw.println("HERE")
//pw.flush()
var inData = BufferedReader(InputStreamReader(client.getInputStream()))
d("TEST >> ", inData.toString())
//client.close()
} catch (ex: Exception) {
d("TEST > ERROR 2>>> ", ex.toString())
Snackbar.make(mainView, "$ex", Snackbar.LENGTH_INDEFINITE ).show()
} finally {
d("TEST >> Sent done 2>"," for $hex")
}
}).start()
结果是,除了打开的连接外,什么也不做,也不向服务器发送任何内容,但有返回数据。(来到这里)
从IP从端口到IP到端口的时间方法ASCII十六进制
04:49:24.500您(回复)444192.168.1.44642 TCP到达这里47 4F 54 20 48 45
04:49:19.500 192.168.1.4 4642您444 TCP
如果我取消对flush()的注释,则只发送消息(此处),但没有响应。如果printwriter被推荐出去,而write没有注释,则情况也是如此
从IP从端口到IP到端口的时间方法ASCII十六进制
04:53:09.107 192.168.1.4 4680您在这里使用444 TCP\n 48 45 52 45 0A
目标是发送数据(此处)并获得响应(此处)。我尝试了我能想到的每一个谷歌搜索词,尝试了TCP类,尝试了一系列的例子,都归结到这一点。我被困在这个问题上的时间超过了我愿意承认的时间,我没有在谷歌搜索和测试之前问过这个问题。
我希望这是件简单的事情,以后我会踢自己 很抱歉浪费了你的时间。。。。。。应该归咎于我的测试设置。。。。浪费了这么多时间。。。。好。。当然可以睡觉了,谢谢你的努力 你的代码没有意义。你的发送代码没有读取任何内容
inData.toString()
不是I/O操作。尝试readLine()
,因为您正在从第二个块发送一行。这里没有异常关闭的证据。这两个代码段应该做相同的事情,连接到服务器,发送一些数据并从服务器获取。服务器不是基于android的,用于使用Pocket Sender测试Im。你是对的,代码什么都不读,但这不是我的问题。第一个服务器正确地向服务器发送数据,但没有返回任何数据,而第二个服务器只是打开一个连接,在触发服务器返回数据时不发送任何数据。服务器上没有应发送数据的条件。它在接收到anyIm时发送,监视PocketSender发送的内容。我可以看到应用程序何时连接、发送数据以及发送回什么数据。第一个代码段发送数据,但连接被关闭,第二个代码段不发送数据(应该),但连接保持打开,以便将数据发送回android应用程序。试过写,试过使用printwriter,试过。。。我不知道还有什么好尝试的,因为“连接被关闭”。给我们看看日志。回答我关于等待答复的问题。给我们点东西。这两段代码之间的唯一区别是write()
和println()
之间的区别,您没有任何理解的迹象。当你在做这件事时,请解释一下当你的代码中没有刷新时,你标题中关于flush()
的声明。