参考博客: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之Room
  2. Android的线程使用来更新UI----Thread、Handler、Looper、TimerT
  3. Android应用程序绑定服务(bindService)的过程
  4. Android中文API (110) —— CursorTreeAdapter
  5. Android中Adapter类详解
  6. WebKit android介绍
  7. Android音频开发之AudioTrack
  8. mybatisplus的坑 insert标签insert into select无参数问题的解决
  9. python起点网月票榜字体反爬案例

随机推荐

  1. 12.21作业
  2. Emmet 常用语法、HTML5元素基础知识
  3. 阿里云开源镜像站支持IPv6访问
  4. Ement常用语法/元素四类属性及布局标签学
  5. 在阿里云镜像站下载blender
  6. emmet常用语法
  7. 总结:云服务器建站之后访问不了的原因和解
  8. VMware虚拟机安装Centos7
  9. VMware虚拟机安装archlinux
  10. Table及Form表单