【已解决】 用java写了一个Socket.IO的服务端,可是用安卓一直连接不上怎么办;
   在IDEA里面分别写了服务端(Server)和客户端(Client),用localhost可以互相连接成功,发送信息。但是,我在安卓里面写服务端,就一直连接不上,提示连接失败
IDEA java服务端代码:
public static void main(String [] args){
    //设置地址和端口
    Configuration config = new Configuration();
    config.setHostname("localhost");
    config.setPort(8000);
    System.out.println("ip:"+config.getHostname()+"  port:"+config.getPort());
    //获取当前时间
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
    SocketIOServer server = new SocketIOServer(config);
    //服务监听,监听是否有用户接入
    server.addConnectListener(new ConnectListener() {
        // 添加客户端连接监听器
        public void onConnect(SocketIOClient client) {
            System.out.println(client.getRemoteAddress() + " webClient客户端接入");
            //不知道如何与客户端对应,好的办法是自己去写对应的函数   如果客户端Client连接成功,发送给Client一个字符串"hello"
            client.sendEvent("connected", "hello");
        }
    });
    //监听客户端事件,client_info为事件名称,-自定义事件  发送信息接口
    server.addEventListener("get_client_info", String.class, new DataListener<String>(){
        public void onData(SocketIOClient client, String data, AckRequest ackRequest) throws ClassNotFoundException {
            //客户端推送advert_info事件时,onData接受数据,这里是string类型的json数据,还可以为Byte[],object其他类型
            String sa = client.getRemoteAddress().toString();
            String clientIp = sa.substring(1,sa.indexOf(":"));//获取客户端连接的ip
            Map params = client.getHandshakeData().getUrlParams();//获取客户端url参数
            System.out.println("服务端接收客户端的信息为:"+clientIp+"************"+data);
        }
    });
    //添加客户端断开连接事件
    server.addDisconnectListener(new DisconnectListener(){
        public void onDisconnect(SocketIOClient client) {
            String sa = client.getRemoteAddress().toString();
            String clientIp = sa.substring(1,sa.indexOf(":"));//获取设备ip
            System.out.println(clientIp+"-------------------------"+"客户端已断开连接");
            //给客户端发送消息  tip:这里已经断开,发不出去的
            client.sendEvent("advert_info",clientIp+"客户端你好,我是服务端,期待下次和你见面");
        }
    });
    server.start();
    while (true){
        try {
            Thread.sleep(20000);
            //广播消息
            server.getBroadcastOperations().sendEvent("borcast","time:"+ df.format(new Date())+"------are you live?");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
Android studio Android客户端代码:
public class MainFragment extends AppCompatActivity {
    private EditText mInputMessageView;
//    private String mUsername="ert";
    private Socket mSocket;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //监听事件 
        //创建ChatApplication类,把mSocket信息拿过来,
            ChatApplication app = new ChatApplication();
            mSocket = app.getSocket();
            mSocket.on(Socket.EVENT_CONNECT,onConnect);
            mSocket.on("connected", onLogin);
            mSocket.on("borcast", onNewMessage);
            mSocket.connect();
    //        mSocket.emit("add user", mUsername);
        }
        //信息接收监控
        private Emitter.Listener onNewMessage = new Emitter.Listener() {
            @Override
            public void call(final Object... args) {
                System.out.println("receive borcast data:" + args[0].toString());
            }
    
        };
    
        //连接监控
        private Emitter.Listener onConnect = new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                mSocket.send("hello i am android Client");
    //                if(null!=mUsername){
    //                    mSocket.emit("add user", mUsername);
    //                    Log.e("Tag",mUsername+"开始尝试连接");
    //                }else {
    //                    Log.e("Tag","您的登录ID为空,请检查您的变量mUsername是否为空");
    //                }
            }
        };
    
        //登录监控
        private Emitter.Listener onLogin = new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                System.out.println("receive connected data:" + args[0].toString());
            }
        };
    
        public void btn_click(View view) {
            mInputMessageView = (EditText)findViewById(R.id.message_input);
    //        if (null == mUsername) return;
            if (!mSocket.connected()) {
                Log.e("Tag","fail connected");
                return;
            }
            String message = mInputMessageView.getText().toString().trim();
            if (TextUtils.isEmpty(message)) {
                Log.e("Tag","null message:");
                mInputMessageView.requestFocus();
                return;
            }
            mInputMessageView.setText("");
            Log.e("Tag","Android Client发送的信息为:"+message);
            //把信息放在ui上,这里官方给的demo就是把信息放在RecyclerView上
            //addMessage(mUsername, message);
    
            // 执行发送消息尝试。
            mSocket.emit("get_client_info", "Android Client发送的信息为:"+message);
        }
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mSocket.disconnect();
            //分别关闭onConnect,onNewMessage,onLogin
            mSocket.off(Socket.EVENT_CONNECT, onConnect);
          mSocket.off("borcast", onNewMessage);
          mSocket.off("connected", onLogin);
      }
  }
 
类:ChatApplication
public class ChatApplication extends Application {
    private Socket mSocket;
    {
        try {
            IO.Options options = new IO.Options();
            options.transports = new String[]{"websocket"};
            options.reconnectionAttempts = 2;
            options.reconnectionDelay = 1000;//失败重连的时间间隔
            options.timeout = 500;//连接超时时间(ms)
            mSocket = IO.socket(Constants.CHAT_SERVER_URL,options);   //CHAT_SERVER_URL = "https://10.0.2.2:8000";
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
    }
    public Socket getSocket() {
        return mSocket;
    }
}
您的每一个用心回答,都会让这个世界变得更美好一些!