android io写去服务器,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();

}

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

});

});

2020-07-07

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值