android - Android 上的 jWebSocket 客户端无法连接到本地服务器

标签 android client websocket

我正在尝试在 Android 上启动一个非常简单的 jWebSocket 客户端并将其连接到我的本地服务器。我将演示中的 JWC 类与 jWebSocket 1.0 beta 8 和 Android 4.0.3 一起使用,我的代码如下所示:

import org.jwebsocket.api.WebSocketClientEvent;
import org.jwebsocket.api.WebSocketClientTokenListener;
import org.jwebsocket.api.WebSocketPacket;
import org.jwebsocket.client.token.BaseTokenClient;
import org.jwebsocket.kit.WebSocketException;
import org.jwebsocket.token.Token;

import android.app.Activity;
import android.content.Context;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import cased.smids.communication.JWC;

public class TasksActivity extends Activity implements WebSocketClientTokenListener {
   Spinner spinner;
   Button btn_Start;

    /** Called when the activity is first created. */
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.main);

        JWC.init();

        spinner = (Spinner)findViewById(R.id.sp_Task);
        btn_Start = (Button)findViewById(R.id.btn_Start);

        ArrayAdapter<CharSequence> adapter = 
                ArrayAdapter.createFromResource(
                        this,
                        R.array.Tasks,
                        android.R.layout.simple_spinner_item
                );
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        btn_Start.setOnClickListener(new View.OnClickListener() {
            public void onClick(View src) {
                switch (src.getId()) {
                    case R.id.btn_Start:
                        if (spinner.getSelectedItem().toString().equals("Connect")) {
                            try {
                                System.out.println("connecting manually...");
                                JWC.open();
                            } catch (WebSocketException e) {
                                e.printStackTrace();
                            }
                        }
                    default:
                        break;
                }
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("* opening... ");
        try {
            JWC.addListener(this);
            JWC.open();
        } catch (WebSocketException ex) {
            System.out.println("* exception: " + ex.getMessage());
        }
    }

    @Override
    protected void onPause() {
        System.out.println("* closing... ");
        try {
            JWC.close();
            JWC.removeListener(this);
        } catch (WebSocketException ex) {
            System.out.println("* exception: " + ex.getMessage());
        }
        super.onPause();
    }

    public void processClosed(WebSocketClientEvent arg0) {
        System.out.println("closed");
    }

    public void processOpened(WebSocketClientEvent arg0) {
        System.out.println("opened");
    }

    public void processOpening(WebSocketClientEvent arg0) {
        System.out.println("opening");
    }

    public void processPacket(WebSocketClientEvent arg0, WebSocketPacket arg1) {
        System.out.println("packet");
    }

    public void processReconnecting(WebSocketClientEvent arg0) {
        System.out.println("reconnecting");
    }

    public void processToken(WebSocketClientEvent arg0, Token arg1) {
        System.out.println("token");
    }
}

所以基本上它只是一个微调器和一个按钮。现在,我想做的就是连接到本地 jWebSocketServer。 demo-app(来自网站的 .apk 包,如果我导入代码,eclipse 会告诉我在编译代码之前删除许多“@Overwrite” - 在发生相同的“bug”之后)与我的服务器一起工作,因此它必须是代码。现在我得到的只是“正在连接...”,大约 0.1 秒后“关闭”。每次。

顺便说一句。该应用程序具有正确的 INTERNET 和 ACCESS_NETWORK_STATE,因此这应该不是问题。

如果有任何帮助,我将不胜感激。

干杯

最佳答案

事实证明,BaseTokenClient.open() 捕获了所有异常并且不采取任何措施(静默失败)。就我而言 - NetworkOnMainThreadException。谜团解开了。

关于android - Android 上的 jWebSocket 客户端无法连接到本地服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11222133/

相关文章:

java - 按下后退按钮时保存

Java Rest @GET 可以工作,但 @DELETE 和 @POST 路径不会被命中

java - 如何在 Spring Soap 客户端上添加自定义 header

Java代码从不进入try-catch中的try block

Python WSS : chrome not recognizing auto validated certificate

javascript - Websocket 无效的帧头

Android:后台服务不会停止

android - iOS 或 Android 上的 WebKit 开发中的陷阱/错误

java - 无法读取 Jelly Bean 上的套接字 InputStream

javascript - 未捕获的 InvalidStateError : Failed to execute 'send' on 'WebSocket' : Still in CONNECTING state