歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Android 開發之Socket編程 UDP和TCP通信實現

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

日期:2017/2/28 16:09:37   编辑:Linux教程

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