java的io安卓能用吗_阳光沙滩-用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(){

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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值