歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Android 開發之Socket編程 UDP和TCP通信實現

1、 Socket通信模型如下:


應用程序通過套接字可以進行通信,可以使用udp協議或者使用tcp協議

當客戶端和服務器端的協議時相對應的,客戶端使用tcp,那麼服務器端使用tcp

 

2、 UDP協議:把數據打包成數據包,然後直接發送對應的ip地址,速度快,但是不保證

成功率,並且數據大小有限

TCP協議:首先連接接收方,然後發送數據,保證成功率, 速度慢

 

3、 TCP通信方式如下:

    

 

 

而UDP通信不使用InputStream和OutputStream 

4、 UDP通信實現:

UDP使用DatagramSocket對象來實現 

UDP的客戶端代碼實現如下:

       public static void main(String[] args) {

       try {

           //首先創建一個DatagramSocket對象

           DatagramSocket socket = new DatagramSocket(4567);

           //創建一個InetAddree

InetAddress serverAddress = InetAddress.getByName("192.168.1.104");

           String str = "hello";  //這是要傳輸的數據

           byte data [] = str.getBytes();  //把傳輸內容分解成字節

           //創建一個DatagramPacket對象,並指定要講這個數據包發送到網絡當中的哪個、

地址,以及端口號

           DatagramPacket packet = new

 DatagramPacket(data,data.length,serverAddress,4567);

           //調用socket對象的send方法,發送數據

           socket.send(packet);

       } catch (Exception e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

}

 

 UDP的服務端代碼實現如下:

//創建一個DatagramSocket對象,並指定監聽的端口號

              DatagramSocket socket = new DatagramSocket(4567);

              byte data [] = new byte[1024];

              //創建一個空的DatagramPacket對象

               DatagramPacket packet = 

new DatagramPacket(data,data.length);

              //使用receive方法接收客戶端所發送的數據,

              //如果客戶端沒有發送數據,該進程就停滯在這裡

              socket.receive(packet);

              String result = new 

String(packet.getData(),packet.getOffset(),

packet.getLength());

        System.out.println("result--->" + result);

 

5、  TCP通信的實現:

TCP使用Socket對象

 

TCP協議客戶端實現:

//創建一個Socket對象,指定服務器端的IP地址和端口號

           Socket socket = new Socket("192.168.1.104",4567);

           //使用InputStream讀取硬盤上的文件

           InputStream inputStream = new

 FileInputStream("f://file/words.txt");

           //從Socket當中得到OutputStream

           OutputStream outputStream = socket.getOutputStream();

           byte buffer [] = new byte[4*1024];

           int temp = 0 ;

           //將InputStream當中的數據取出,並寫入到OutputStream當中

           while((temp = inputStream.read(buffer)) != -1){

              outputStream.write(buffer, 0, temp);

           }

           outputStream.flush();

       } 

   TCP協議服務器端現實:

       //聲明一個ServerSocket對象

        ServerSocket serverSocket = null;

        try {

                //創建一個ServerSocket對象,並讓這個Socket在4567端口監聽

              serverSocket = new ServerSocket(4567);

        //調用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));

              }

           } catch (IOException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

           }

            serverSocket.close();

           } 

Copyright © Linux教程網 All Rights Reserved