簡體   English   中英

無法在 Android 客戶端和 Node.js socket.io 服務器之間通信

[英]Unable to communicate between Android client and Node.js socket.io server

我已經看過很多關於這方面的教程,但它們似乎都不起作用,所以不知道是服務器、客戶端還是我網絡上的某些東西阻止了它,我不知道,所以我來這里尋求幫助。

僅供參考,這是主要基於的教程: https : //socket.io/blog/native-socket-io-and-android/

所以這是我的服務器。 目前它應該做的就是檢測用戶何時連接,然后檢測用戶發送消息並將它們發送回所有客戶端。

索引.js

const express = require("express");
const app = express();
const path = require("path");
const server = require("http").createServer(app);
const io = require("socket.io")(server);

server.listen(3000, () => {
    console.log("Server listening at 3000");
});

app.use(express.static(path.join(__dirname, "public")));


io.on("connection", (socket) => {
    console.log("User connected");

   socket.on("new message", (data) => {
       console.log("New message" + data)

       socket.emit("new message", {
           message: data
       });
   })
});

我的 Android 客戶端由 3 個類組成。 但是為了盡量縮短這個時間,我將只包含其中的 2 個,就好像可以在這些中找到問題一樣,它可以在第 3 個中修復。

這是在開始時啟動的內容,只需按下按鈕即可將您帶到主要的“聊天”部分,但單擊按鈕后,服務器應記錄連接,但控制台中不會出現任何內容。 所以我只能假設套接字連接由於某種原因不起作用。 你也可以忽略昵稱,我還沒有實現,一直試圖讓主要部分先工作。

主活動.java

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;

import io.socket.client.Socket;

public class MainActivity extends AppCompatActivity {

    private EditText nickname;
    private Button enterChat;

    private Socket mSocket;

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

        nickname = findViewById(R.id.nickname);
        enterChat = findViewById(R.id.enterChat);

        ChatApplication app = (ChatApplication) getApplication();
        mSocket = app.getSocket();
        mSocket.connect();

        enterChat.setOnClickListener(v -> {
            mSocket.emit("connection");
            Intent i = new Intent(MainActivity.this, ChatActivity.class);
            i.putExtra("name", nickname.getText().toString());
            startActivity(i);
        });
    }
}

這只是為了能夠從任何其他活動中獲取 Socket。

聊天應用程序

import android.app.Application;

import java.net.URISyntaxException;

import io.socket.client.IO;
import io.socket.client.Socket;

public class ChatApplication extends Application {
    private Socket mSocket;
    {

        try {
                                      //My IPv4 address here
            mSocket = IO.socket("http://xxx.xxx.x.xxx:3000");
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
    }

    public Socket getSocket() {
        return mSocket;
    }
}

任何幫助表示贊賞:)

發現問題,我需要把這個添加到AndroidManifest.xml

<application
    ...
    android:usesCleartextTraffic="true"
    ...
</application>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM