【问题标题】:Android - Socket.io not connectingAndroid - Socket.io 未连接
【发布时间】:2021-03-13 18:42:54
【问题描述】:

我使用 Java 和 Socket.IO 连接到我的服务器,但我正在尝试从 android 客户端连接 nodejs 服务器但连接不成功.. (onConnectError) 我尝试了所有解决方案,但我不知道我的问题如何。

我的服务器代码(server.js);

    const express = require('express');
    const app = express();
    const path = require('path');
    const server = require('http').createServer(app);
    const io = require('socket.io')(server);
    const port = process.env.PORT || 3000;
    
    server.listen(port, () => {
      console.log('Server listening at port %d', port);
    });
    
    app.use(express.static(path.join(__dirname, 'public')));
    
    
    io.on('connection', (socket) => {
      let addedUser = false;
      console.log('connection success');
    
    
      socket.on('example', (data) => {
        socket.emit('example', 'example');
        console.log('example');
      });
    
      socket.on('disconnect', () => {
    
        console.log('disconnecting');
    
      });
    });

在 java 方面,我使用互联网和 http 权限进行清单。

    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:usesCleartextTraffic="true"...

我的java代码;

public class MainActivity extends AppCompatActivity {
  private static final String TAG = MainActivity.class.getName();

  public static Socket mSocket; {
    try {
      mSocket = IO.socket("http://192.168.1.35:3000");
    } catch (URISyntaxException e) {
      throw new RuntimeException(e);
    }
  }


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);
    mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
    mSocket.connect();
  }

  private Emitter.Listener onConnectError = new Emitter.Listener() {
    @Override
    public void call(Object...args) {
      runOnUiThread(new Runnable() {
        @Override
        public void run() {
          Toast.makeText(getApplicationContext(), "Unable to connect to NodeJS server", Toast.LENGTH_LONG).show();

        }
      });
    }
  };

  @Override
  protected void onDestroy() {
    super.onDestroy();

    mSocket.disconnect();
    mSocket.off(Socket.EVENT_CONNECT_ERROR, onConnectError);
    mSocket.off(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
  }
}    

【问题讨论】:

    标签: javascript java android node.js socket.io


    【解决方案1】:

    我认为你必须使用ws://192.168.1.35:3000"
    所以改变这个

      public static Socket mSocket; {
        try {
          mSocket = IO.socket("http://192.168.1.35:3000");
        } catch (URISyntaxException e) {
          throw new RuntimeException(e);
        }
      }
    

    到这里

      public static Socket mSocket; {
        try {
          mSocket = IO.socket("ws://192.168.1.35:3000");
        } catch (URISyntaxException e) {
          throw new RuntimeException(e);
        }
      }
    

    【讨论】:

    • 能否请您评论您的代码并删除视频的链接
    • 是我的第一个答案,它说我应该提供资源 xD,所以我就是这样做的
    猜你喜欢
    • 2016-03-20
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 2016-11-06
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多