首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用websocket制作android聊天模块

用websocket制作android聊天模块
EN

Stack Overflow用户
提问于 2018-11-13 15:23:07
回答 1查看 1.1K关注 0票数 1

我想在android应用程序上做一个聊天模块。用户和管理员可以进行简单的聊天,以便进行交流。使用节点js的服务器。客户端使用java-WebSocket-client。

首先,我在节点js上创建了web socket服务器。

代码语言:javascript
复制
const Messages = require('./models/index').Messages;
const WebSocketServer = require("ws").Server;

module.exports = (server) => {
    const wss = new WebSocketServer({server: server});

    wss.on("connection", function (ws) {

    console.info("websocket connection open");

    ws.on("join", function (userId) {
        console.log(userId +" : has joined the chat "  );

        Messages.findAll({
          attributes: ['message', 'roomId', 'senderId','createdAt'],
          where: { roomId: userId },
          order: [ ['createdAt', 'ASC'] ]
        }).then(message => {
          ws.send('get_last_messages', message);
        });
    });

    ws.on('message', (data) => {  
    console.log("websocket received a message");
    console.log(data);

    ws.on("close", function () {
        console.log("websocket connection close");
    });
});
console.log("websocket server created");

Android chatActivity (实现"org.java-websocket:Java-WebSocket:1.3.9"):

代码语言:javascript
复制
public class MainActivity extends Activity {
    private WebSocketClient mWebSocketClient;

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

        connectWebSocket();
    }
private void connectWebSocket() {
        URI uri;
        try {
            uri = new URI("ws://websockethost:8080");
        } catch (URISyntaxException e) {
            e.printStackTrace();
            return;
        }

        mWebSocketClient = new WebSocketClient(uri) {
            @Override
            public void onOpen(ServerHandshake serverHandshake) {
                Log.i("Websocket", "Opened");
                mWebSocketClient.send("Hello from " + Build.MANUFACTURER + " " + Build.MODEL);
            }

            @Override
            public void onMessage(String s) {
                final String message = s;
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        TextView textView = (TextView)findViewById(R.id.messages);
                        textView.setText(textView.getText() + "\n" + message);
                    }
                });
            }

            @Override
            public void onClose(int i, String s, boolean b) {
                Log.i("Websocket", "Closed " + s);
            }

            @Override
            public void onError(Exception e) {
                Log.i("Websocket", "Error " + e.getMessage());
            }
        };
        mWebSocketClient.connect();
    }

    public void sendMessage(View view) {
        EditText editText = (EditText)findViewById(R.id.message);
        mWebSocketClient.send(editText.getText().toString());
        editText.setText("");
}

但它不起作用。连接已关闭。

如何正确创建nodejs websocket服务器和android websocketclient?

EN

回答 1

Stack Overflow用户

发布于 2018-11-13 15:34:16

您需要在AndroidManifest.xml中添加internet权限,看起来您可以在MainThread上进行网络通信。

https://developer.android.com/training/basics/network-ops/connecting

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53275825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档