我想要做的是一个本地聊天应用程序(即,通过本地网络,即没有互联网,即基于Android的热点wifi)。我研究了套接字并尝试使用https://github.com/socketio/socket.io-client-java实现我尝试主要使用socket.emit
和socket.on
。我的两个设备都连接在本地网络上,所以我可以这样做
class MainActivity : AppCompatActivity()
{
var TAG = "TCPClient"; //For debugging, always a good idea to have defined
var serverIp = "192.168.0.102";
var startTime = 0L;
var serverPort = 5000;
lateinit var socket:Socket
var onMessageReceived=object:Emitter.Listener
{
override fun call(vararg args: Any?)
{
runOnUiThread {
editText2.setText(args[0].toString())
Toast.makeText(this@MainActivity,"called",Toast.LENGTH_SHORT).show()
}
}
}
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var SOCKET_URL="http://192.168.0.102"
socket= IO.socket(SOCKET_URL)
button.setOnClickListener {
socket.emit("messageSent",editText.text.toString())
Toast.makeText(this@MainActivity,"button",Toast.LENGTH_SHORT).show()
}
socket.on("messageSent",onMessageReceived)
socket.connect()
}
override fun onDestroy()
{
socket.disconnect()
super.onDestroy()
}
}
我正在尝试的是在editext1中写入的文本(在一部手机中使用ip 192.68.0.102)显示在edittex2中(两个设备中的一个(一个是ip 192.168.0.102,另一个是本地网络上的设备)(192.168.0.100) )因为我在两个设备上运行相同的应用程序))按下按钮时。我做错了什么?我会通过在其中一个设备上托管休息服务并从网络中的所有连接设备访问它来制作这个应用程序,但我面临的主要问题是,如果我这样做,我将不得不一次又一次地请求其余的api在线程中的循环中检查新消息。
当我们使用socket.on时,不是所有连接的设备都会监听吗?