参考博客:http://blog.csdn.net/mad1989/article/details/9147661

一、android 实现socket简单通信

添加权限

            <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>                <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>                <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>                <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>                <uses-permission android:name="android.permission.INTERNET"/>  

TCP协议通信

使用TCP协议通信
android端实现:

protected void connectServerWithTCPSocket() {     Socket socket;     try {// 创建一个Socket对象,并指定服务端的IP及端口号         socket = new Socket("192.168.1.32", 1989);         // 创建一个InputStream用户读取要发送的文件。         InputStream inputStream = new FileInputStream("e://a.txt");         // 获取Socket的OutputStream对象用于发送数据。         OutputStream outputStream = socket.getOutputStream();         // 创建一个byte类型的buffer字节数组,用于存放读取的本地文件         byte buffer[] = new byte[4 * 1024];         int temp = 0;         // 循环读取文件         while ((temp = inputStream.read(buffer)) != -1) {             // 把数据写入到OuputStream对象中             outputStream.write(buffer, 0, temp);         }         // 发送读取的数据到服务端         outputStream.flush();         /** 或创建一个报文,使用BufferedWriter写入,看你的需求 **/  //          String socketData = "[2143213;21343fjks;213]";  //          BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(  //                  socket.getOutputStream()));  //          writer.write(socketData.replace("\n", " ") + "\n");  //          writer.flush();         /************************************************/     } catch (UnknownHostException e) {         e.printStackTrace();     } catch (IOException e) {         e.printStackTrace();     }  }  

服务器端简单实现:

    public void ServerReceviedByTcp() {          // 声明一个ServerSocket对象          ServerSocket serverSocket = null;          try {              // 创建一个ServerSocket对象,并让这个Socket在1989端口监听              serverSocket = new ServerSocket(1989);              // 调用ServerSocket的accept()方法,接受客户端所发送的请求,              // 如果客户端没有发送数据,那么该线程就停滞不继续              Socket socket = serverSocket.accept();              // 从Socket当中得到InputStream对象              InputStream inputStream = socket.getInputStream();              byte buffer[] = new byte[1024 * 4];              int temp = 0;              // 从InputStream当中读取客户端所发送的数据              while ((temp = inputStream.read(buffer)) != -1) {                  System.out.println(new String(buffer, 0, temp));              }              serverSocket.close();          } catch (IOException e) {              e.printStackTrace();          }      } 

UDP协议通信

客户端发送数据实现:

    protected void connectServerWithUDPSocket() {          DatagramSocket socket;          try {              //创建DatagramSocket对象并指定一个端口号,注意,如果客户端需要接收服务器的返回数据,              //还需要使用这个端口号来receive,所以一定要记住              socket = new DatagramSocket(1985);              //使用InetAddress(Inet4Address).getByName把IP地址转换为网络地址                InetAddress serverAddress = InetAddress.getByName("192.168.1.32");              //Inet4Address serverAddress = (Inet4Address) Inet4Address.getByName("192.168.1.32");                String str = "[2143213;21343fjks;213]";//设置要发送的报文                byte data[] = str.getBytes();//把字符串str字符串转换为字节数组                //创建一个DatagramPacket对象,用于发送数据。                //参数一:要发送的数据  参数二:数据的长度  参数三:服务端的网络地址  参数四:服务器端端口号               DatagramPacket packet = new DatagramPacket(data, data.length ,serverAddress ,10025);                socket.send(packet);//把数据发送到服务端。            } catch (SocketException e) {              e.printStackTrace();          } catch (UnknownHostException e) {              e.printStackTrace();          } catch (IOException e) {              e.printStackTrace();          }        }  

客户端接收服务器返回的数据:

    public void ReceiveServerSocketData() {          DatagramSocket socket;          try {              //实例化的端口号要和发送时的socket一致,否则收不到data              socket = new DatagramSocket(1985);              byte data[] = new byte[4 * 1024];              //参数一:要接受的data 参数二:data的长度              DatagramPacket packet = new DatagramPacket(data, data.length);              socket.receive(packet);              //把接收到的data转换为String字符串              String result = new String(packet.getData(), packet.getOffset(),                      packet.getLength());              socket.close();//不使用了记得要关闭              System.out.println("the number of reveived Socket is  :" + flag                      + "udpData:" + result);          } catch (SocketException e) {              e.printStackTrace();          } catch (IOException e) {              e.printStackTrace();          }      }  

服务器接收客户端实现:

    public void ServerReceviedByUdp(){          //创建一个DatagramSocket对象,并指定监听端口。(UDP使用DatagramSocket)            DatagramSocket socket;          try {              socket = new DatagramSocket(10025);              //创建一个byte类型的数组,用于存放接收到得数据                byte data[] = new byte[4*1024];                //创建一个DatagramPacket对象,并指定DatagramPacket对象的大小                DatagramPacket packet = new DatagramPacket(data,data.length);                //读取接收到得数据                socket.receive(packet);                //把客户端发送的数据转换为字符串。                //使用三个参数的String方法。参数一:数据包 参数二:起始位置 参数三:数据包长                String result = new String(packet.getData(),packet.getOffset() ,packet.getLength());            } catch (SocketException e) {              e.printStackTrace();          } catch (IOException e) {              e.printStackTrace();          }        }  

更多相关文章

  1. Android参数设置: Preference
  2. Android cmd 命令常用参数详解
  3. android 面向对象数据库 db40使用demo
  4. android中清空一个表---类似truncate table 表名 这样的功能 and
  5. Android 5种方式存储数据:
  6. Android Linux Socket 数据传输错误
  7. 关于android 多媒体数据库
  8. GreenDao —— 简单快速操作 Android SQLite 数据库

随机推荐

  1. 使用响应式编程(RxJava)开发Android(安卓)A
  2. Android(安卓)使用SharePerference实现判
  3. 一些安卓的基本权限 清单配置文件
  4. Android获取App当前页面的Activity名称
  5. Android查看Apk签名
  6. Android音频录制、播放,这一篇就够了
  7. 属于自己的Android框架路线
  8. Android中InCallUI显示太慢问题分析
  9. API Demos 2.2 研读笔记(12)——Intents Ch
  10. Calabash 快速入门 (Android)