アプリでUDP通信をしたい
アンドロイドアプリを制作していてUDPで文字列を送信したいのですが、実行するとエラーで止まってしまいます。なんとかして送信できるようにしたいです。どなたかご教授お願いします。
エラーメッセージ android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1450) at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:302) at libcore.io.IoBridge.sendto(IoBridge.java:569) at java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:124) at java.net.DatagramSocket.send(DatagramSocket.java:721) at com.example.udptest.UDPController.send(UDPController.kt:32) at com.example.udptest.MainActivity$onCreate$$inlined$timer$1$lambda$1.run(MainActivity.kt:19) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) ソースコード(kotlin) UDPContrloller.kt package com.example.udptest import java.net.DatagramPacket import java.net.DatagramSocket import java.net.InetAddress object UDPController { var ip = InetAddress.getByName("192.168.11.5") var port = 5000 fun receive() : String { val socket = DatagramSocket(port) val buffer = ByteArray(8192) val packet = DatagramPacket(buffer, buffer.size) socket.receive(packet) socket.close() return String(buffer) } fun send(msg: String) { val socket = DatagramSocket(port) val byte = msg.toByteArray(); val packet = DatagramPacket(byte, byte.size, ip, port); socket.send(packet); socket.close() } } MainActivity.kt package com.example.udptest import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.os.Handler import kotlin.concurrent.timer class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val handler = Handler() timer(period = 5000){ handler.post(object:Runnable{ override fun run(){ UDPController.send("hello") } }) } } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/28 11:26