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 实现及简单封装。相关推荐

  1. 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一)

    上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 上篇文章中给大家简单介绍了一些业务,上门洗车APP --- Android客户端开发 前言及业务简介,本篇文章给大家介绍下 ...

  2. python安卓开发实例_python服务器与android客户端socket通信实例

    本文实例讲述了python服务器与android客户端socket通信的方法.分享给大家供大家参考.具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: #server.p ...

  3. android 手机 与 python服务器_python服务器与android客户端socket通信实例

    本文实例讲述了python服务器与android客户端socket通信的方法.分享给大家供大家参考.具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: #server.p ...

  4. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

  5. Android 客户端Socket 与 Java服务端ServerSocket

    Socket编程 一.Java网络编程基础知识        1.两台计算机间进行通讯需要以下三个条件: 1). IP地址(例如 : 192.168.1.1) 2). 协议(服务端与客户端之间双方自行 ...

  6. android中对Toast的简单封装

    // 一般做法 public void showToast(Context context, String msg) { Toast.makeText(context, msg, Toast.LENG ...

  7. bsdiff php,Apk差分升级Android客户端和Node.js服务端实现

    核心的内容是bsdiff和bspatch 源码根目录/bootable/recovery/applypatch下找到,bsdiff官网同样也是可以的,编出来的二进制文件可以在源码根目录out/host ...

  8. 来自Android客户端什么意思,如何通过回调函数中的Node.js来自Android客户端

    我想从插座Android客户端将数据发送到服务器的Node.js .. 在服务器端做了什么香港专业教育学院:如何通过回调函数中的Node.js来自Android客户端 socket.on('new u ...

  9. android socket 简易聊天室 java服务器,Android Socket通信实现简单聊天室

    socket通信是基于底层TCP/IP协议实现的.这种服务端不需要任何的配置文件和tomcat就可以完成服务端的发布,使用纯java代码实现通信.socket是对TCP/IP的封装调用,本身并不是一种 ...

最新文章

  1. Spring Boot 中使用 MongoDB 增删改查
  2. CanalAdapter启动过程分析(源码详解)
  3. 网络day02-设备配置远程登录
  4. 最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这
  5. 如何用大数据找到男/女朋友?
  6. mysql error writing_MySQL:Error writing file (Errcode: 28)解决方法
  7. linux弹性网卡,将弹性网卡附加到 ECS 实例上之后如何配置弹性网卡
  8. openwrt mt7620 内存大小检测
  9. 分布式session的6种解决方案
  10. 学习设计模式 - 六大基本原则之开闭原则
  11. python把源代码打包成.exe文件
  12. 15.UNIX 环境高级编程--进程间的通信
  13. 二十七、oracle 异常
  14. html仿qq截图,javascript实现粘贴qq截图功能(clipboardData)
  15. linux磁盘扩容不影响原数据,linux 升级磁盘后扩容数据盘大小
  16. java发送通知栏样式_Android 通知栏Notification详解
  17. Android 中利用XPosed拦截系统消息
  18. python : pandas 中多重索引multiindex与多个标的dataframe
  19. 【个人小程序和企业小程序的区别】
  20. 树莓派安装Windows

热门文章

  1. 3dmax 蒙皮 消失
  2. RTC实时时钟(STM32)
  3. 系统架构之业务逻辑层
  4. NEUQOJ 1869: Harry Potter and the Prisoner of Azkaban
  5. 内网服务器防火墙作用,防火墙内网用户通过公网域名或公网IP访问内部服务器 - 华为技术论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  6. office365请求产品激活,如何找密匙?
  7. 量化交易(二)---------海龟交易法则
  8. Foursquare
  9. 李开复、沈向洋的恩师:印度农村走出的图灵奖得主
  10. git push某一次的commit记录