推出一个简单的套接字连接localhost和android模拟器

时间:2018-03-09 12:57:54

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

我正在为我的大学建立一个学生出勤申请。通过大学网络参加考试的地方。每个教室都有一个单独的“路由器”,系统会检测学生是否在该范围内。 同样,我要做的是建立套接字连接,每次连接时,服务器都会收到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服务器。但是,当我使用浏览器作为客户端时,'connection'事件会起作用。

这是我的客户端代码:

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;
}

1 个答案:

答案 0 :(得分:1)

尝试更改" localhost"到您机器的IP地址,如"http://192.168.1.100:4040"。你可以发布backtrace的截图吗?