在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的服务端,可是用安卓一直连接不上怎么办;...相关推荐

  1. java程序聊天室发送不了_江湖救急!我写了一个java聊天室程序,运行时可以打开聊天窗口,但无法发送消息,怎么会这样,求大神拯救...

    若回答被采纳,除财富值之外,另有重谢!!!/*客户端*/importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPan ...

  2. 2021最新4合1即时通讯IM源码-服务端+PC+WEB+安卓+IOS完整原生源码

    介绍: 20214合1即时通讯IM源码 服务端+PC+WEB+安卓+IOS完整原生源码 附完整开发文档+视频搭建教程. 注意:此源码亲测可用,他处有小问题,我们已经修复.任何源码,难免有瑕疵,但不影响 ...

  3. Java 使用socket实现从服务端下载文件[TCP]

    这篇和上一篇可以对应上了,使用的都是Socket,TCP. 注意我们这一次是以音频文件做的演示,实际上换成其他二进制文件(如视频.图片)实现代码也完全样. 如果是文本文件,则需要做小部分修改,用字符流 ...

  4. JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

    一.什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的.停工时间,就是不能向用户提供服务的时间.高可用,就是系统具有高度可用性,尽量减少停工时间.如何用最简单的方法来搭建 ...

  5. java编写桌球游戏素材小球图片_你学不好Java还是有原因的!拿走这套Java系统教程,自学必备...

    很多同学都遇到过一种情况:就是无论自己怎么学Java,到头来发现学的都是皮毛,当真正去用python去做一个项目的时候,脑袋里面一片空白.完全不知道从何做起! 那是你没有系统的学过一次Java,现在的 ...

  6. java中的图形界面编辑界面_第58节:Java中的图形界面编程-GUI

    欢迎到我的简书查看我的文集 前言: GUI是图形用户界面,在Java中,图形用户界面我们用GUI表示,而GUI的完整英文为: Graphical User Interface(图形用户接口), 所谓图 ...

  7. java主线程和子线程区别_主线程异常– Java

    java主线程和子线程区别 Being a Java Programmer, you must have seen exception in thread main sometimes while r ...

  8. java对象的状态由什么表示_持久化层的Java对象可处于哪些状态?这些状态有哪些特征?...

    当应用程序通过new语句创建了一个对象,这个对象的生命周期就开始了,当不再有任何引用变量引用它,这个对象就结束生命周期,它占用的内存就可以被JVM的垃圾回收器回收.对于需要被持久化的Java对象,在它 ...

  9. java为属性提供访问器方法_关于继承:Java不继承访问器方法吗?

    给定一个扩展了实现接口" DeeDum"的类" Foo"的类" Bar" public interface DeeDum { public ...

最新文章

  1. Python3 xml模块的增删改查
  2. 独家 | 用归纳偏置来增强你的模型性能
  3. java中的枚举类_java中的枚举类型
  4. Faster RCNN总结
  5. 前端学习(1660):前端系列实战课程之时间对象介绍
  6. python opencv调用cuda_Win10使用VS2019从源码编译OpenCV 4.4 + CUDA 11.0 + Cudnn 8.0 + python3
  7. method swizzling你应该注意的点
  8. 开放网络操作系统介绍(2)、SONiC
  9. 10倍性能提升!英伟达新卡皇降临,图灵架构GTX 20系列发布
  10. C# 使用SHFileOperation 复制文件 注意引用方式
  11. 百度地图+vue+element搜索定位经纬度坐标
  12. 群体遗传学-选择消除分析
  13. Python项目:爬取智联招聘网站的数据分析职位信息并进行可视化分析
  14. kettle Call From LAPTOP-14BPR3NI/192.168.1.2 to locahost:8020 failed on connection
  15. 自然语言处理--HMM.MEMM,CRF(三)
  16. python输入一个英文句子 输出单词个数_编写程序,给出一个英文句子,统计单词个数。_学小易找答案...
  17. FAT12文件系统 理解
  18. 开发平台的优势在哪?
  19. declare命令,export命令
  20. Camera结构原理

热门文章

  1. 使用 Java Stream 实现集合排序
  2. P4287 [SHOI2011]双倍回文
  3. 外贸英语900句之 保险 Insurance
  4. ChatGPT到底是个啥 - 它甚至会和狗说话
  5. 美国一男子起诉苹果:称 iPhone 6 电池存在缺陷导致爆炸
  6. 如何在Mac上刻录DVD以获取可播放的视频?
  7. 华硕B250M主板安装win7
  8. [PHP面试题]跳槽面试必背-自己最近5年的整理(二)
  9. 怎么把ide改成ahci_怎样把已安装好的IDE硬盘模式改成AHCI模式 格式已整理 可直接下载打印...
  10. 计算机接口IDE接什么,IDE接口硬盘数据线_IT /计算机_数据的正确连接方法