老套图上图:

如上所示:

我这边定义了两个APP一个是server端一个是客户端

步骤:

先安装服务端APP,再安装客户端APP,然后打开客户端APP后悔自动打开服务端的service然后开启服务端的socket服务,然后再点击客户端的发送数据到服务端按钮开始先连接socket服务然后连接成功后悔自动发送数据到服务端的socket端,socket服务端接收到数据后进行数据的转发有转发给了客户端。

先看开启socket服务端开启服务的代码

  Log.e("ServerService", "服务启动了onCreate");
//下面这个是开启的线程池poolExecutor.execute(() -> {try {ServerSocket serverSocket = new ServerSocket(9999);while (true) {//阻塞方法socket = serverSocket.accept();InetAddress inetAddress = socket.getInetAddress();Log.e("ServerService", "主机地址:" + inetAddress.getHostAddress());Log.e("ServerService", "主机名字:" + inetAddress.getHostName());poolExecutor.execute(() -> {try {DataInputStream inputStream = new DataInputStream(socket.getInputStream());DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());while (true) {String receive = inputStream.readUTF();Log.e("ServerService:" + Thread.currentThread().getName(), "接收到的数据为:" + receive);handler.post(() -> Toast.makeText(getApplicationContext(), "ServerService接收到的数据为:" + receive, Toast.LENGTH_SHORT).show());outputStream.writeUTF(receive);outputStream.flush();}} catch (IOException e) {e.printStackTrace();}});}} catch (IOException e) {e.printStackTrace();}});

再看socket客户端连接socket服务端并且发送数据给服务端的代码

//下面的开启的线程池
poolExecutor.submit(() -> {try {InetAddress localHost = InetAddress.getLocalHost();String ip = localHost.toString().split("/")[1];
//                String ip = "10.53.137.24";Socket socket = new Socket(ip, 9999);DataInputStream inputStream = new DataInputStream(socket.getInputStream());DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());outputStream.writeUTF("新中国" + num);outputStream.flush();String s = inputStream.readUTF();runOnUiThread(() -> Toast.makeText(SocketClientActivity.this, "发送的数据为:" + s, Toast.LENGTH_LONG).show());} catch (IOException e) {e.printStackTrace();}});

注意:客户端和服务端的端口得一致,ip是服务端的ip,然后得先开启服务端的socket后,客户端socket才可以开始连接服务端的socket,只有连接服务端的socket成功后方可发送数据。

上面代码比较简短,如果需要完整代码的,我提供一份源码:

socket源码下载:socket源码下载

Android开发之Socket通信的方法相关推荐

  1. Android 开发之 bindService() 通信

    Service 启动方式有两种 startService(intent) bindService(intent,conn,Context.BIND_AUTO_CREATE) startService( ...

  2. Android开发之Handler的使用方法(源代码分享)

    Handler主要接受子线程发送的数据, 并用此数据配合主线程更新UI.. 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发.比 ...

  3. Android开发之SQLite的使用方法

    前言 SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据库的比较多,因为它占用系统资源很少.Android系统中也不 ...

  4. android中oncreate方法,android开发之onCreate( )方法详解

    这里我们只关注一句话:This is where you should do all of your normal static set up.其中我们只关注normal static, normal ...

  5. android注册弹窗,Android开发之PopupWindow创建弹窗、对话框的方法详解

    本文实例讲述了Android开发之PopupWindow创建弹窗.对话框的方法.分享给大家供大家参考,具体如下: 简介: PopupWindow 可创建类似对话框风格的窗口 效果: 使用方法: 使用P ...

  6. android 分享元素,Android开发之5.0activity跳转时共享元素的使用方法

    在两个activity中的xml文件中编写下面的ImageView,主要的就是transitionName属性必须使用相同的属性. android:id="@+id/item_image&q ...

  7. Android透明到白色滑动渐变,Android开发之Activity全透明渐变切换方法

    Activity全透明渐变切换 类似于Dialog的显示动画效果一样 1. 先设置Acitivity为去透明,在取消掉Activity默认的切换动画 true @color/colorPrimary ...

  8. android开发之onCreate( )方法详解

    android开发之onCreate( )方法详解 onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢? 先看看Go ...

  9. android之json解析优化,Android开发之json解析

    目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...

最新文章

  1. 听说Java被玩儿淘汰了?骨灰级程序员:远比你们想象的强大!
  2. python 时间格式 工作日_python使用time、datetime返回工作日列表实例代码
  3. 波士顿动力CEO:不排斥军方订单,就想你粗暴地对待机器狗
  4. Spring Cloud 使用 FeignClient 启动报错
  5. HD 1159 Common Subsequence (最长公共子序列)
  6. postgresql10.5安装
  7. 怎么做fastreport使用离线数据源
  8. 【WP 8.1开发】解决摄像头翻转问题(RuntimeApp篇)
  9. Python 位操作运算符
  10. 基于windows平台的命令行软件安装工具Chocolatey的安装
  11. Python-strace命令追踪ssh操作
  12. 分享一篇关于社区团购的竞品分析
  13. 快乐的Linux命令行--读书笔记1
  14. 为什么我们要升级到 iOS 12.1.3?
  15. 查看 Visio 是否激活以及激活方法
  16. 蔡凯龙:跨界是一种寻求人生宽度的方式
  17. 第四次实验(全连MGRE、星型拓扑、OSPF通私有网段)
  18. 代码随想录第十七天LeetCode 110、257、404
  19. pdf电子书转换成txt文档
  20. 【jzoj4742】【单峰】

热门文章

  1. 计算机技能需求新排名:C语言仅排第 8,第 1 名你想不到!
  2. java 网络文件_java实现从网络下载多个文件
  3. python语句关键词用法_python中关键字as的使用方法简介
  4. oracle表的历史数据转储过程,C#连接Oracle数据库通过存储过程操作数据库 - cuizm的专栏 - CSDN博客...
  5. python next day_PYTHON养成日记 DAY-13
  6. android viewpager 滑动方法,Android中Viewpager禁止滑动的实现
  7. java语音开源_号外!号外!百度语音开源库更新了
  8. logging 日志输出乱码 info_接口自动化测试中logging实际用法
  9. 11旋转编码器原理_旋转编码器的原理是什么?增量式编码器和绝对式编码器有什么区别?...
  10. 22(2)序列化以及反序列化