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;
}
}
java的io安卓能用吗_阳光沙滩-用java写了一个Socket.IO的服务端,可是用安卓一直连接不上怎么办;...相关推荐
- java程序聊天室发送不了_江湖救急!我写了一个java聊天室程序,运行时可以打开聊天窗口,但无法发送消息,怎么会这样,求大神拯救...
若回答被采纳,除财富值之外,另有重谢!!!/*客户端*/importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPan ...
- 2021最新4合1即时通讯IM源码-服务端+PC+WEB+安卓+IOS完整原生源码
介绍: 20214合1即时通讯IM源码 服务端+PC+WEB+安卓+IOS完整原生源码 附完整开发文档+视频搭建教程. 注意:此源码亲测可用,他处有小问题,我们已经修复.任何源码,难免有瑕疵,但不影响 ...
- Java 使用socket实现从服务端下载文件[TCP]
这篇和上一篇可以对应上了,使用的都是Socket,TCP. 注意我们这一次是以音频文件做的演示,实际上换成其他二进制文件(如视频.图片)实现代码也完全样. 如果是文本文件,则需要做小部分修改,用字符流 ...
- JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性
一.什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的.停工时间,就是不能向用户提供服务的时间.高可用,就是系统具有高度可用性,尽量减少停工时间.如何用最简单的方法来搭建 ...
- java编写桌球游戏素材小球图片_你学不好Java还是有原因的!拿走这套Java系统教程,自学必备...
很多同学都遇到过一种情况:就是无论自己怎么学Java,到头来发现学的都是皮毛,当真正去用python去做一个项目的时候,脑袋里面一片空白.完全不知道从何做起! 那是你没有系统的学过一次Java,现在的 ...
- java中的图形界面编辑界面_第58节:Java中的图形界面编程-GUI
欢迎到我的简书查看我的文集 前言: GUI是图形用户界面,在Java中,图形用户界面我们用GUI表示,而GUI的完整英文为: Graphical User Interface(图形用户接口), 所谓图 ...
- java主线程和子线程区别_主线程异常– Java
java主线程和子线程区别 Being a Java Programmer, you must have seen exception in thread main sometimes while r ...
- java对象的状态由什么表示_持久化层的Java对象可处于哪些状态?这些状态有哪些特征?...
当应用程序通过new语句创建了一个对象,这个对象的生命周期就开始了,当不再有任何引用变量引用它,这个对象就结束生命周期,它占用的内存就可以被JVM的垃圾回收器回收.对于需要被持久化的Java对象,在它 ...
- java为属性提供访问器方法_关于继承:Java不继承访问器方法吗?
给定一个扩展了实现接口" DeeDum"的类" Foo"的类" Bar" public interface DeeDum { public ...
最新文章
- Python3 xml模块的增删改查
- 独家 | 用归纳偏置来增强你的模型性能
- java中的枚举类_java中的枚举类型
- Faster RCNN总结
- 前端学习(1660):前端系列实战课程之时间对象介绍
- python opencv调用cuda_Win10使用VS2019从源码编译OpenCV 4.4 + CUDA 11.0 + Cudnn 8.0 + python3
- method swizzling你应该注意的点
- 开放网络操作系统介绍(2)、SONiC
- 10倍性能提升!英伟达新卡皇降临,图灵架构GTX 20系列发布
- C# 使用SHFileOperation 复制文件 注意引用方式
- 百度地图+vue+element搜索定位经纬度坐标
- 群体遗传学-选择消除分析
- Python项目:爬取智联招聘网站的数据分析职位信息并进行可视化分析
- kettle Call From LAPTOP-14BPR3NI/192.168.1.2 to locahost:8020 failed on connection
- 自然语言处理--HMM.MEMM,CRF(三)
- python输入一个英文句子 输出单词个数_编写程序,给出一个英文句子,统计单词个数。_学小易找答案...
- FAT12文件系统 理解
- 开发平台的优势在哪?
- declare命令,export命令
- Camera结构原理
热门文章
- 使用 Java Stream 实现集合排序
- P4287 [SHOI2011]双倍回文
- 外贸英语900句之 保险 Insurance
- ChatGPT到底是个啥 - 它甚至会和狗说话
- 美国一男子起诉苹果:称 iPhone 6 电池存在缺陷导致爆炸
- 如何在Mac上刻录DVD以获取可播放的视频?
- 华硕B250M主板安装win7
- [PHP面试题]跳槽面试必背-自己最近5年的整理(二)
- 怎么把ide改成ahci_怎样把已安装好的IDE硬盘模式改成AHCI模式 格式已整理 可直接下载打印...
- 计算机接口IDE接什么,IDE接口硬盘数据线_IT /计算机_数据的正确连接方法