在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;
}
}