Android开发之Socket通信的方法
老套图上图:
如上所示:
我这边定义了两个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通信的方法相关推荐
- Android 开发之 bindService() 通信
Service 启动方式有两种 startService(intent) bindService(intent,conn,Context.BIND_AUTO_CREATE) startService( ...
- Android开发之Handler的使用方法(源代码分享)
Handler主要接受子线程发送的数据, 并用此数据配合主线程更新UI.. 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发.比 ...
- Android开发之SQLite的使用方法
前言 SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据库的比较多,因为它占用系统资源很少.Android系统中也不 ...
- android中oncreate方法,android开发之onCreate( )方法详解
这里我们只关注一句话:This is where you should do all of your normal static set up.其中我们只关注normal static, normal ...
- android注册弹窗,Android开发之PopupWindow创建弹窗、对话框的方法详解
本文实例讲述了Android开发之PopupWindow创建弹窗.对话框的方法.分享给大家供大家参考,具体如下: 简介: PopupWindow 可创建类似对话框风格的窗口 效果: 使用方法: 使用P ...
- android 分享元素,Android开发之5.0activity跳转时共享元素的使用方法
在两个activity中的xml文件中编写下面的ImageView,主要的就是transitionName属性必须使用相同的属性. android:id="@+id/item_image&q ...
- Android透明到白色滑动渐变,Android开发之Activity全透明渐变切换方法
Activity全透明渐变切换 类似于Dialog的显示动画效果一样 1. 先设置Acitivity为去透明,在取消掉Activity默认的切换动画 true @color/colorPrimary ...
- android开发之onCreate( )方法详解
android开发之onCreate( )方法详解 onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢? 先看看Go ...
- android之json解析优化,Android开发之json解析
目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...
最新文章
- 听说Java被玩儿淘汰了?骨灰级程序员:远比你们想象的强大!
- python 时间格式 工作日_python使用time、datetime返回工作日列表实例代码
- 波士顿动力CEO:不排斥军方订单,就想你粗暴地对待机器狗
- Spring Cloud 使用 FeignClient 启动报错
- HD 1159 Common Subsequence (最长公共子序列)
- postgresql10.5安装
- 怎么做fastreport使用离线数据源
- 【WP 8.1开发】解决摄像头翻转问题(RuntimeApp篇)
- Python 位操作运算符
- 基于windows平台的命令行软件安装工具Chocolatey的安装
- Python-strace命令追踪ssh操作
- 分享一篇关于社区团购的竞品分析
- 快乐的Linux命令行--读书笔记1
- 为什么我们要升级到 iOS 12.1.3?
- 查看 Visio 是否激活以及激活方法
- 蔡凯龙:跨界是一种寻求人生宽度的方式
- 第四次实验(全连MGRE、星型拓扑、OSPF通私有网段)
- 代码随想录第十七天LeetCode 110、257、404
- pdf电子书转换成txt文档
- 【jzoj4742】【单峰】
热门文章
- 计算机技能需求新排名:C语言仅排第 8,第 1 名你想不到!
- java 网络文件_java实现从网络下载多个文件
- python语句关键词用法_python中关键字as的使用方法简介
- oracle表的历史数据转储过程,C#连接Oracle数据库通过存储过程操作数据库 - cuizm的专栏 - CSDN博客...
- python next day_PYTHON养成日记 DAY-13
- android viewpager 滑动方法,Android中Viewpager禁止滑动的实现
- java语音开源_号外!号外!百度语音开源库更新了
- logging 日志输出乱码 info_接口自动化测试中logging实际用法
- 11旋转编码器原理_旋转编码器的原理是什么?增量式编码器和绝对式编码器有什么区别?...
- 22(2)序列化以及反序列化