Android 客户端Socket 实现及简单封装。
Socket,客户端实现。先下载SocketTools工具,以便测试。
第一次用,没有写到的,请指出。首先 建个类,然后写方法。。。。。。调皮了。。直接来
TCP UDP 连接
public class SocketClient {private static final Socket SOCKET=null;private static final DataInputStream dis=null;//输入private static final DataOutputStream dos=null;//输出private Timer heartBeatTimer;private TimerTask heartBeatTask;private SocketClient(){}private static SocketClient socketClient;private static DatagramSocket socketUdp=null;private static Socket socketTcp=null;//获取单例public static SocketClient getSingle(){if(socketClient==null){synchronized (SocketClient.class) {//加锁 多个进程使用if(socketClient==null){//优化socketClient=new SocketClient();}}}return socketClient;}/*** 获取TCP连接* @param serverIp :服务Ip地址* @param prot :端口号* @param data :data 要发送的数据* @param call :CallBackSocket 接口*/public void getTCPConnect(String serverIp,int prot,String data,CallBackSocketTCP call){//创建Socket"192.168.1.115",60000try {socketTcp= new Socket(serverIp,prot);SocketUtil util=new SocketUtil(socketTcp);util.sendData(data);//获取输入流,并读取服务端的响应信息boolean b=true;while(b){boolean ba=util.isConnect();//把值给接口,这里的接口作用,就是传值的作用call.isConnect(ba);System.out.println("当前Soket是否连接:"+ba);String info =util.receiveData();//同理call.Receive(info);System.out.println(" 服务器说:"+info);try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }/*** UDP连接,* @param port 端口号* @param data 通过UDP发送的数据*/public void getUDPConnect(int port,String datas,CallBackSocketUDP call){try {/** 向服务器端发送数据*/// 1.定义服务器的地址、端口号、数据localhostInetAddress address = InetAddress.getByName("localhost");
// port = 8800;byte [] data = datas.getBytes();// 2.创建数据报,包含发送的数据信息DatagramPacket packet = new DatagramPacket(data, data.length, address, port);// 3.创建DatagramSocket对象socketUdp = new DatagramSocket();// 4.向服务器端发送数据报socketUdp.send(packet);boolean b=true;while(b){/** 接收服务器端响应的数据*/// 1.创建数据报,用于接收服务器端响应的数据byte[] data2 = new byte[1024];DatagramPacket packet2 = new DatagramPacket(data2, data2.length);// 2.接收服务器响应的数据socketUdp.receive(packet2);// 3.读取数据String reply = new String(data2, 0, packet2.getLength());call.Receive(reply);//把发送的数据交给接口System.out.println("我是客户端,服务器说:" + reply);// 4.关闭资源}
// socketUdp.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 关闭 这里请教一个问题。 就是我关闭不了。为了实现长连接。怎么弄。*/public void closeSocket(){if(socketUdp!=null){socketUdp.close();System.out.println("关闭了UDP连接");}else if(socketTcp!=null){try {socketTcp.close();System.out.println("关闭了TCP连接");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}else{System.out.println("没有打开无须关闭!!");}}
在这里面。使用了两个接口。不要忘记添加了
//TCP
public interface CallBackSocketTCP {//这个回调用于获取服务端返回的数据void Receive(String info);//判断是否处在连接在状态void isConnect(boolean state);
}
//UDP
public interface CallBackSocketUDP {void isConnect(boolean state);//判断状态void Receive(String data); //接收服务端返回的数据
}
//对了,还有一个工具类
/*** * @author jay chen* Socket 工具类*/
public class SocketUtil {Socket socket = null;public SocketUtil(Socket socket) {super();this.socket = socket;}//断开连接public void closeConnect(){try {socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//检测是否连接 如果断开就重连public boolean isConnect(){if(socket.isClosed()){//检测是否关闭状态//TODO 这个地方检测数 是断开,在这写重连的方法。return false;} return true;}//发送数据public void sendData(String data) throws IOException {OutputStream outputStream = socket.getOutputStream();outputStream.write(data.getBytes());}//接收数据public String receiveData() throws IOException {InputStream inputStream = socket.getInputStream();
// DataInputStream data=new DataInputStream(inputStream);byte[] buf = new byte[1024];int len = inputStream.read(buf);String text = new String(buf, 0, len);return text;}
}
最后就是调用了。
public static void main(String[] args) {
//IP 请填写你们的本机地址 SocketClient.getSingle().getTCPConnect("192.168.00.00", 60000,"客户端 要发送的data", new CallBackSocketTCP() {// @Override
// public void Receive(String info) {// // TODO Auto-generated method stub
// System.out.println("服务端返回的数据:"+info);
//
// }
//
// @Override
// public void isConnect(boolean state) {// // TODO Auto-generated method stub
// if(state){// System.out.println(state);
// }else{// System.out.println("正在尝试重新连接socket");
// }
// }
//
//
// });SocketClient.getSingle().getUDPConnect(55555,"这是我要发送的数据",new CallBackSocketUDP() {@Overridepublic void isConnect(boolean state) {//连接状态// TODO Auto-generated method stubSystem.out.println(state);}@Overridepublic void Receive(String data) {//返回的数据// TODO Auto-generated method stubSystem.out.println(data);}});//关闭 socketSocketClient.getSingle().closeSocket();}
打开SocketTool 开始测试吧。。
Android 客户端Socket 实现及简单封装。相关推荐
- 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一)
上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 上篇文章中给大家简单介绍了一些业务,上门洗车APP --- Android客户端开发 前言及业务简介,本篇文章给大家介绍下 ...
- python安卓开发实例_python服务器与android客户端socket通信实例
本文实例讲述了python服务器与android客户端socket通信的方法.分享给大家供大家参考.具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: #server.p ...
- android 手机 与 python服务器_python服务器与android客户端socket通信实例
本文实例讲述了python服务器与android客户端socket通信的方法.分享给大家供大家参考.具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: #server.p ...
- Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
- Android 客户端Socket 与 Java服务端ServerSocket
Socket编程 一.Java网络编程基础知识 1.两台计算机间进行通讯需要以下三个条件: 1). IP地址(例如 : 192.168.1.1) 2). 协议(服务端与客户端之间双方自行 ...
- android中对Toast的简单封装
// 一般做法 public void showToast(Context context, String msg) { Toast.makeText(context, msg, Toast.LENG ...
- bsdiff php,Apk差分升级Android客户端和Node.js服务端实现
核心的内容是bsdiff和bspatch 源码根目录/bootable/recovery/applypatch下找到,bsdiff官网同样也是可以的,编出来的二进制文件可以在源码根目录out/host ...
- 来自Android客户端什么意思,如何通过回调函数中的Node.js来自Android客户端
我想从插座Android客户端将数据发送到服务器的Node.js .. 在服务器端做了什么香港专业教育学院:如何通过回调函数中的Node.js来自Android客户端 socket.on('new u ...
- android socket 简易聊天室 java服务器,Android Socket通信实现简单聊天室
socket通信是基于底层TCP/IP协议实现的.这种服务端不需要任何的配置文件和tomcat就可以完成服务端的发布,使用纯java代码实现通信.socket是对TCP/IP的封装调用,本身并不是一种 ...
最新文章
- Spring Boot 中使用 MongoDB 增删改查
- CanalAdapter启动过程分析(源码详解)
- 网络day02-设备配置远程登录
- 最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这
- 如何用大数据找到男/女朋友?
- mysql error writing_MySQL:Error writing file (Errcode: 28)解决方法
- linux弹性网卡,将弹性网卡附加到 ECS 实例上之后如何配置弹性网卡
- openwrt mt7620 内存大小检测
- 分布式session的6种解决方案
- 学习设计模式 - 六大基本原则之开闭原则
- python把源代码打包成.exe文件
- 15.UNIX 环境高级编程--进程间的通信
- 二十七、oracle 异常
- html仿qq截图,javascript实现粘贴qq截图功能(clipboardData)
- linux磁盘扩容不影响原数据,linux 升级磁盘后扩容数据盘大小
- java发送通知栏样式_Android 通知栏Notification详解
- Android 中利用XPosed拦截系统消息
- python : pandas 中多重索引multiindex与多个标的dataframe
- 【个人小程序和企业小程序的区别】
- 树莓派安装Windows
热门文章
- 3dmax 蒙皮 消失
- RTC实时时钟(STM32)
- 系统架构之业务逻辑层
- NEUQOJ 1869: Harry Potter and the Prisoner of Azkaban
- 内网服务器防火墙作用,防火墙内网用户通过公网域名或公网IP访问内部服务器 - 华为技术论坛 - 51CTO技术论坛_中国领先的IT技术社区...
- office365请求产品激活,如何找密匙?
- 量化交易(二)---------海龟交易法则
- Foursquare
- 李开复、沈向洋的恩师:印度农村走出的图灵奖得主
- git push某一次的commit记录