栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Android应用程序使用Socket.io连接到Node.js服务器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android应用程序使用Socket.io连接到Node.js服务器

我实际上解决了问题。我使用了PC的本地IP
http://192.168.0.xxx:7000,该应用程序能够从模拟器连接到聊天服务器。我不知道为什么会这样,但是将来可能会对某人有所帮助:)

更新:

这就是我最终构造项目的方式。我创建了一个singleton类来处理Android端的套接字连接(您也可以将其作为服务来完成)。收到消息时,单例类向其他应用程序广播一个意图。然后由广播接收者在相关活动中获取意图。

Android Side(单人):

public class SocketSingleton {    private static SocketSingleton instance;    private static final String SERVER_ADDRESS = "http://1.2.3.4:1234";    private SocketIO socket;    private Context context;    public static SocketSingleton get(Context context){        if(instance == null){ instance = getSync(context);        }        instance.context = context;        return instance;    }    public static synchronized SocketSingleton getSync(Context context){        if (instance == null) { instance = new SocketSingleton(context);        }        return instance;    }    public SocketIO getSocket(){        return this.socket;    }    private SocketSingleton(Context context){        this.context = context;        this.socket = getChatServerSocket();        this.friends = new ArrayList<Friend>();    }    private SocketIO getChatServerSocket(){        try { SocketIO socket = new SocketIO(new URL(SERVER_ADDRESS), new IOCallback() {     @Override     public void onDisconnect() {         System.out.println("disconnected");     }     @Override     public void onConnect() {         System.out.println("connected");     }     @Override     public void on(String event, IOAcknowledge ioAcknowledge, Object... objects) {         if (event.equals("chatMessage")) {  JSonObject json = (JSONObject) objects[0];  ChatMessage chatMessage = new ChatMessage(json);  Intent intent = new Intent();  intent.setAction("newChatMessage");  intent.putExtra("chatMessage", chatMessage);  context.sendBroadcast(intent);         }     }     @Override     public void onError(SocketIOException e) {         e.printStackTrace();     } }); return socket;        } catch (MalformedURLException ex) { ex.printStackTrace();        }        return null;    }}

Android Side(活动):

public class ChatActivity extends Activity {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_chat);    IntentFilter newChatMessageFilter = new IntentFilter("newChatMessage");    this.registerReceiver(new MessageReceiver(), newChatMessageFilter);    ...    public class MessageReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent){ final ChatMessage chatMessage =(ChatMessage) intent.getExtras().get("chatMessage"); runonUiThread(new Runnable() {     @Override     public void run() {         mAdapter.add(chatMessage);         mAdapter.notifyDataSetChanged();     } });        }    }}

服务器端:

var express = require('express');var app = express();var server = require('http').createServer(app).listen(1234);var io = require('socket.io').listen(server);io.sockets.on('connection', function(client){    console.log("client connected: " + client.id);    client.on("sendTo", function(chatMessage){        console.log("Message From: " + chatMessage.fromName);        console.log("Message To: " + chatMessage.toName);        io.sockets.socket(chatMessage.toClientID).emit("chatMessage", {"fromName" : chatMessage.fromName,  "toName" : chatMessage.toName,  "toClientID" : chatMessage.toClientID,  "msg" : chatMessage.msg});    });});


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446469.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号