【问题标题】:Exstablishing a simple socket connect with localhost and android emulator使用 localhost 和 android 模拟器建立一个简单的套接字连接
【发布时间】:2018-03-09 12:57:53
【问题描述】:

我正在为我的大学构建学生出勤申请。出席的地点是通过大学网络进行的。每个教室都有一个单独的“路由器”,系统会检测学生是否在该范围内。 同样的,我要做的是建立一个socket连接,每次连接,服务器反过来接收WiFi信息来判断教室。

为了建立,我首先制作了这个index.js文件,这是它的代码

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req,res){
  res.sendFile(__dirname+'/index.html');
})

http.listen(4040, function(){
console.log("Server is listening on port 4040");
})
io.on('connection', function(socket){
  console.log('connect', "A user connected "+ socket.id)
  io.on('disconnect', function(socket){
    console.log("disconnect A user disconnected" + socket.id)
  })
})

问题:问题在于,“连接”事件不起作用。它说它正在侦听,但没有任何内容被控制台记录。我使用模拟器作为客户端和本地 XAMPP 服务器。但是,当我将浏览器用作客户端时,“连接”事件确实有效。

这是我的客户端代码:

private val socket = Socket()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_student_home)
    setSupportActionBar(student_toolbar)

    val toggle = ActionBarDrawerToggle(
            this, student_drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
    student_drawer_layout.addDrawerListener(toggle)
    toggle.syncState()
    student_nav_view.setNavigationItemSelectedListener(this)

    socket.connect()
}
override fun onResume() {
    super.onResume()
    socket.connect()
}
override fun onStart() {
    super.onStart()
    socket.connect()
}
override fun onDestroy() {
    super.onDestroy()
    socket.disconnect()
}//[End : onDestroy]

fun Socket() : Socket{
    val socket : Socket
    try {
        socket = IO.socket("http://localhost:4040")
    } catch (e: URISyntaxException) {
        throw RuntimeException(e)
    }
    return socket;
}

【问题讨论】:

    标签: android websocket socket.io android-emulator kotlin


    【解决方案1】:

    尝试将“localhost”更改为您机器的 IP 地址,例如 "http://192.168.1.100:4040"。可以发回溯的截图吗?

    【讨论】:

    • 确保您的“地址”有监听器,允许网络权限并且设备网络已开启。
    • 我不太确定什么是回溯。
    • 实际上我有java背景,当涉及到android应用程序时,如果你在java的上下文中询问那么它会有所帮助。你是否将localhost更改为你的“机器IP地址”?你的“地址”有听众吗?看这里,github.com/cy6erGn0m/kotlinx-sockets
    • 我知道,地址是我机器的ip地址,但是连接模拟器后控制台上没有显示任何内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2019-03-08
    • 2017-07-25
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    相关资源
    最近更新 更多