Android Socket通信详解

2019-12-10 19:42:14于丽

 服务器端简单实现:

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

4.2使用UDP协议通信

客户端发送数据实现:

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