如何解决如何在Android应用程序中通过UPD套接字接收数据
我已经阅读了许多不同的帖子和问题,在我看来,这应该相对容易解决。我设法使用一个套接字对象将 UDP 数据包发送到正确的(地址、端口),但只能使用相同的套接字对象读取消息。这种行为可以在我的代码以及相应的输出中看到:
GlobalScope.launch {
val messageStr = "Hello Android!"
val s = DatagramSocket(null)
s.reuseAddress = true
s.broadcast = true
s.bind(InetSocketAddress(6670))
s.soTimeout = 1500
var local = InetAddress.getByName("0.0.0.0")
val msg_length = messageStr.length
val messageSent = messageStr.toByteArray()
val p = DatagramPacket(messageSent,msg_length,local,6670)
s.send(p)
val sRec = DatagramSocket(null)
sRec.reuseAddress = true
sRec.broadcast = true
sRec.bind(InetSocketAddress(6670))
Log.d("testUDP","SoTimeOut:${sRec.soTimeout}")
sRec.soTimeout = 1500
var data = "Packet0"
var udpPacket = DatagramPacket(
data.toByteArray(),data.length,InetAddress.getByName("0.0.0.0"),6670
)
sRec.send(udpPacket)
data = "Packet1"
udpPacket = DatagramPacket(
data.toByteArray(),6670
)
sRec.send(udpPacket)
data = "Packet2"
udpPacket = DatagramPacket(
data.toByteArray(),6670
)
sRec.send(udpPacket)
var text: String
val messageRec = ByteArray(1500)
val pRec = DatagramPacket(messageRec,messageRec.size)
var count = 0
while(count < 3){
try{
sRec.receive(pRec)
text = String(messageRec,pRec.length)
Log.d("testUDP","message:$text")
} catch (e: Exception){
e.printstacktrace()
}
count +=1
}
s.close()
sRec.close()
}
D/testUDP: message:Packet0
D/testUDP: message:Packet1
D/testUDP: message:Packet2
如您所见,套接字对象 sRec
没有收到套接字对象 s
发送的消息,即使它们都绑定到相同的(地址、端口)。有人可以帮我理解我所缺少的。非常感谢您的时间和帮助。
解决方法
服务器和客户端应该在两个不同的线程上,以确保一个不会阻塞另一个。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。