gpt4 book ai didi

android - 在 Android 中通过套接字发送数据

转载 作者:行者123 更新时间:2023-11-29 00:46:16 24 4
gpt4 key购买 nike

我需要连接到套接字并发送凭据信息,以便开始通过RECEIVE_CRISIS接收即将到来的数据。

我正在使用 Android 代码库 Socket.IO。由于我没有从连接中获得任何日志,因此调试起来确实很困难,我不知道为什么失败以及在哪里失败。自从我开始在 Android 端工作以来,我从未从服务器收到过任何东西。 NSDictionary 相当于 Android 上的 JSONObject 吗? sendEvent 相当于 Android 上的 send()emit() 吗?我需要将 JSON 作为对象还是数组发送吗?最后,如何获取日志错误?

它在 iOS 部分工作,所以我有点迷路了..

这是 iOS 代码:(为了安全起见,我修改了地址):

NSDictionary *params=@{@"user":_username,@"orgid":_organizationId};
[_socketIO connectToHost:@"nodejs.myserver.com" onPort:3000 ];
[_socketIO sendEvent:@"joinparty" withData:params];

这是 Android 代码:

private void connectAndListen(int username) throws Exception {
socket = IO.socket("nodejs.myserver.com:3000");
socket.connect();

JSONObject json = new JSONObject();
json.put("user", username);
json.put("orgid", settings.getString("orgid", ""));

Log.e(TAG, json.toString());

socket.send("joinparty",json);
socket.emit("joinparty", json);

socket.on(RECEIVE_CRISIS, onCrisis);
}

更新的问题

private void connectAndListen(int id) throws Exception {
IO.setDefaultSSLContext(SSLContext.getDefault());

// Set default hostname
HostnameVerifier hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
return true;
}
};
IO.setDefaultHostnameVerifier(hostnameVerifier);
IO.Options options = new IO.Options();
// set as an option
options.sslContext = SSLContext.getDefault();
options.hostnameVerifier = hostnameVerifier;
options.secure = true;
socket = IO.socket("nodejs.myserver.com:3000", options);
socket.connect();
JSONObject json = new JSONObject();
json.put("user", id);
json.put("orgid", settings.getString("orgid", ""));

Map<Object, Object> arrays = new HashMap<>();
arrays.put("user", id);
arrays.put("orgid",settings.getString("orgid", "") );

socket.emit("joinparty", arrays);
socket.on(RECEIVE_CRISIS, onCallback);
socket.on("connect_error", onCallback);
socket.on("connect", onCallback);
socket.on("Object", onCallback);
socket.on("connect_timeout", onCallback);
}

private Emitter.Listener onCallback = new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.e(TAG, args[0]+"");
}
};

最佳答案

Is the NSDictionary is equivalent to the JSONObject on Android?

不,不是。 NSDictionary 是一个 class cluster ,这意味着实际的实现对您(API 用户)是隐藏的。事实上,Foundation框架将在运行时根据数据量等选择合适的实现。Java 最接近它的是 Map<Object, Object>

Is sendEvent equivalent to send() or emit() on Android?

它是为 Android 发出的。 from official documentation

DO I need to send the JSON as an Object or an Array?

尝试发送 Map反而。 JSON 是另一回事。如果您的服务器需要 JSON 格式的数据,则只发送它。

Finally, How to I get the log error?

您需要使用 combination of emitter and manager

关于android - 在 Android 中通过套接字发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38572788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com