1. 程式人生 > >Java基礎總結之網路程式設計

Java基礎總結之網路程式設計

網路程式設計:用Java語言實現計算機間資料的資訊傳遞和資源共享。

網路模型:七層:(從上至下)分別是:應用層、表示層、會話層、傳輸層、網路層、資料鏈路層、物理層。

網路程式設計的三要素:ip、埠、協議

ip:網路中計算機的唯一標識。Ip在計算機底層是由二進位制所表示的,但是為了方便,人們用“點分十進位制”(將二進位制檔案做換為十進位制,再用.分開)表示IP。Ip地址的組成:網路號+主機號。如何檢視自己的ip:ipconfig。如何測試IP通不通:ping

幾個特殊的IP地址:127.0.0.1 迴環地址(表示本機) x.x.x.255廣播地址  x.x.x.0網路地址

埠:是應用程式的標識,範圍為0--65535.

協議:UDP和TCP

UDP:資料打包,有限制,不連線,效率高,不可靠

TCP:建立資料通道,無限制,效率低,可靠

Socket機制:

A:通訊的兩端都應該有Socket物件

B:所有的通訊都是通過Socket間的IO進行操作的

UDP協議傳送和接收資料:

傳送:建立UDP傳送端的Socket物件---建立資料並把資料打包---傳送資料---釋放資源

接收:建立UDP接收端的Socket物件---建立資料包用於接收資料---接收資料---解析資料包---釋放資源

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/*
 *UDP協議傳送資料
 *A:建立傳送端socket
 *B:建立資料,並把資料打包
 *C:呼叫Socket的方法傳送資料包
 *D:釋放資源
 */
public class Send {

	public static void main(String[] args) throws IOException {
		// 建立傳送端 socket
		DatagramSocket ds = new DatagramSocket();
		// 建立資料,並把資料打包,包的值最大64K
		byte[] buf = "UDP簡單應用".getBytes();
		// InetAddress address=InetAddress.getByName("192.168.31.233");
		DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.31.233"), 12306);
		// 傳送資料
		ds.send(dp);
		// 釋放資源
		ds.close();
	}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * UDP協議接收資料 A:建立接收端socket B:建立一個數據包(接收容器) C:呼叫Socket的接收方法接收資料包 D:解析資料包並顯示在資料臺
 * E:釋放資源
 */
public class Receive {

	public static void main(String[] args) throws IOException {
		// 建立接收端Socket物件
		DatagramSocket ds = new DatagramSocket(12306);
		// 建立資料包(接收容器)
		byte[] buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf, buf.length);
		// 呼叫Socket的接收方法接收資料包
		ds.receive(dp);
		// 解析資料包
		System.out.println(
				"From" + dp.getAddress().getHostAddress() + "的資料:" + new String(dp.getData(), 0, dp.getLength()));
		// 釋放資源
		ds.close();
	}
}

 TCP協議傳送和接收資料:

傳送:建立TCP客戶端的Socke物件---獲取輸出流,寫資料---釋放資源

接收:建立TCP伺服器端的Socket物件---見聽客戶端連線---獲取輸入流,讀資料---釋放資源

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client {//客戶端

	public static void main(String[] args) throws IOException {
		// 建立Socket物件
		Socket s = new Socket("192.168.31.233", 2080);
		// 得到輸出流,進行寫資料
		OutputStream os = s.getOutputStream();
		os.write("Is-Me-HL".getBytes());
		// 釋放資源
		s.close();
	}

}
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {//伺服器端

	public static void main(String[] args) throws IOException {
		// 建立ServerSocket物件
		ServerSocket ss = new ServerSocket(2080);
		// 監聽客戶端,返回一個對應的Socket物件
		Socket s = ss.accept();
		// 得到輸入流物件
		InputStream is = s.getInputStream();
		// 列印資訊
		byte[] bys = new byte[1024];
		int len = is.read(bys);
		String message = new String(bys, 0, len);
		System.out.println(message);
		// 關閉資源
		ss.close();
	}

}

上面是對UDP和TCP協議的簡單使用做一個基礎的總結,實際上我們可以結合多執行緒的知識,完成更為人性化,使用者體驗感倍增的網路程式。


注:以上文章僅是個人學習過程總結,若有不當之處,望不吝賜教。