![](/img/trans.png)
[英]Java websocket: How to receive PongMessage from websocket client and respond to this message
[英]Receive text message asynchronously with Websocket Android Client [2]
我尝试从Websocket服务器(使用ASP.NET服务器构建)向Android客户端异步接收文本消息。 我尝试了几次Android websocket库(高速公路,android-websocket,移动websocket,java-websocket,...),但是android客户端仅在发送消息之前收到文本消息。 我会从服务器(或另一个客户端)接收消息,而无需在之前发送文本消息。
例如,您知道任何解决方案或聊天示例应用程序吗?
非常感谢 !
(这是第二篇文章。第一篇在这里 )
这是我与高速公路库一起使用的代码:
private final WebSocketConnection mConnection = new WebSocketConnection();
private void start() {
final String wsuri = "ws://localhost:9000";
try {
mConnection.connect(wsuri, new WebSocketHandler() {
@Override
public void onOpen() {
mConnection.sendTextMessage("Hello, world!");
}
@Override
public void onTextMessage(String payload) {
// Here, I received message only if I have used WebSocketConnection.sendTextMessage(String) function
}
@Override
public void onClose(int code, String reason) {
}
});
} catch (WebSocketException e) {
Log.d(TAG, e.toString());
}
}
从两周开始,我也开始在Android上使用websocket ...就我而言,我想使用WSS,因此,安全的websocket和具有自签名证书的...所有尝试中,唯一可以无缝运行的库是nv- websocket-client,但这仅用于安全的websocket情况。
无论如何,如果您觉得有用,我会将代码放在这里,为了保护隐私,我删除了一些详细信息,如果您需要简单的连接,则可以跳过SSL部分。
public class SocketHandler
{
private final static String LOGTAG = "SocketHandler";
private int TIMEOUT = 5000;
private MainActivity main;
private SocketConnector socketConnector;
public SocketHandler(MainActivity main) {
this.main = main;
}
public void connect() {
socketConnector = new SocketConnector();
socketConnector.execute();
}
public void disconnect() {
socketConnector.ws.disconnect();
}
private class SocketConnector extends AsyncTask<Void, Void, Void> {
WebSocket ws;
@Override
protected Void doInBackground(Void... params) {
try {
SSLContext context = NaiveSSLContext.getInstance("TLS");
WebSocketFactory wsf = new WebSocketFactory();
wsf.setConnectionTimeout(TIMEOUT);
wsf.setSSLContext(context);
ws = wsf.createSocket("wss://" + ADDRESS);
ws.addListener(new WSListener());
ws.addExtension(WebSocketExtension.parse(WebSocketExtension.PERMESSAGE_DEFLATE));
ws.connect();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
private class WSListener extends WebSocketAdapter {
@Override
public void onConnected(WebSocket websocket, Map<String, List<String>> headers) {
websocket.sendText("Hello World");
}
@Override
public void onTextMessage(WebSocket websocket, String message) {
}
@Override
public void onError(WebSocket websocket, WebSocketException cause) {
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.