當前位置:才華齋>計算機>java語言>

Java網路基礎和Socket通訊基礎

java語言 閱讀(3.23W)

導語:Java是一門面向物件程式語言,不僅吸收了C++語言的各種優點,還摒棄了C++裡難以理解的多繼承、指標等概念,因此Java語言具有功能強大和簡單易用兩個特徵。下面我們來看看Java網路基礎和Socket通訊基礎,希望對大家有所幫助。

Java網路基礎和Socket通訊基礎

一、網路基礎

1、InetAddress

InetAddress構造器私有,可以通過多種方式獲得inetAddress物件

InetAddress ip = ocalHost();//獲取本機IP

ip = yName("");//通過名字獲取指定地址IP

String name = ostName();//通過IP獲取IP名字

2、URL統一資源定位符

典型構成:1、網路協議(http://);2、主機地址();3、埠號(80);4、資源路徑(crm/);5、查詢地址(gid=117)

//構造器多種,可以採用指定URL連線構造一個URL,也可以使協議,用埠號,檔名等資訊構成URL

URL url = new URL(str);

String protocol = rotocol();// 獲取協議

String host = ost();// 主機名

int port = ort();//埠號

對資原始檔的一般操作

String file = ile();//獲取資源中包含的檔名稱

InputStream is = Stream();//開啟此URL連線(URLConnection),並獲取連線的輸入流(utputStream())

對URL地址進行轉碼,解碼,防止亂碼

String str1 = de(str, "UTF-8");//對str字串進行UTF-8轉碼

String str2 = de(str1, "UTF-8");//解碼

3、HttpURLConnection

繼承URLConnection類;Http協議簡介 http是一個無狀態協議,請求、響應協議由請求頭和響應頭構成 。

①請求頭: 請求方法:get post put.....

②響應頭 響應狀態碼:status code:200(正常響應) 400~(404,405請求資源異常,不存在,請求響應格式不一致) 500~(500服務器內部異常)

//利用HttpURL協議下載檔案

String str3 = "/uploadfile/2017/0809/20170809085944351.jpg";

URL url2 = new URL(str3);

// 開啟一個URL連線

HttpURLConnection conn = (HttpURLConnection) Connection();//獲取一個連線(URLConnection)

// 設定請求方法

//equestMethod("GET");

// equestProperty("Accep-Language", "zh-en");

//eadTimeout(10000);// 設定讀取超時時間,可以預設

// oInput(true);// 開啟輸入和輸出,可以不設定,預設true

//oOutput(true);

//int code = esponseCode();// 獲取響應狀態碼

// tln(code);

// 判斷是否響應成功

if (code == _OK) {

InputStream is1 = nputStream();

FileOutputStream fileOutputStream = new FileOutputStream(new File("C:UserslxDesktoptestmn.jpg"));

BufferedInputStream bfi = new BufferedInputStream(is1);

BufferedOutputStream bfo = new BufferedOutputStream(fileOutputStream);

int len;

byte[] bs = new byte[1024];

while((len=(bs))!=-1){

e(bs, 0, len);

h();

}

}

二、Socket通訊:

1、TCP/IP

IP:InternetProtocol 網路協議,支撐主機之間通訊的基本協議,如果需要實現主機之間的訊息安全傳輸,通常會結合TCP協議共同使用。全稱為TCP/IP。都是傳輸層協議。

TCP:傳輸控制協議,能保證資料訊息的在主機之間安全傳輸,三次握手,四次揮手。是一個安全傳輸資料協議,所以一般用於資料傳輸的準確性,安全性較高的應用,但是效率較低,如:視訊通話。

C/S 架構: Client/Server 客戶端/伺服器模式

B/S 架構: Browser/Server瀏覽器/伺服器模式

伺服器端:

1、建立serverSocket,此套接字為伺服器專用,構造器應當包含埠號,以供其他主機連線。

2、監聽套接字,並獲得連線:Socket socket = pt( );

3、獲取套接字輸出流:utputStream( );

ServerSocket serverSocket = new ServerSocket(9999);

tln("伺服器開啟");

while (true) {

Socket socket = pt();

tln("客戶端已經連線" + netAddress());

PrintStream ps = new PrintStream(utputStream());

t("歡迎使用socket伺服器");

}

客戶端

1、利用構造器獲取以供連線的套接字,屬性包含目標IP和埠號

2、獲取套接字裡面的輸入流:nputStreeam( );

Socket socket = new Socket("", 9999);

InputStreamReader isr = new InputStreamReader(nputStream());

BufferedReader br = new BufferedReader(isr);

String msg = Line();

tln(msg);

2、UDP

UDP:user datagram Protocol 使用者資料協議,無法保證資料的安全性,但是可以提交資料傳輸的效。

接收資料:為阻塞式,需要單獨作為一個執行緒

1、建立網路通道datagramSocket,應當是包含埠地址的構造器

2、建立資料包datagramPacket ,其中構造方法必須包含一個空的字元緩衝區,偏移量等資訊。

3、通過iver(datagramPacket);接受資料,向資料包寫入資料。

4、獲取資料包內容 new String(ata() , ffset(),ength());

public static void main(String[] args) throws IOException {

DatagramSocket datagramSocket = new DatagramSocket(2345);

byte[] b = new byte[1024];

while (true) {

DatagramPacket datagramPacket = new DatagramPacket(b, th);

ive(datagramPacket);//接受資料

String string = new String(ata(), ffset(),

ength());

tln("接受到的資料是" + string);

}

}

傳送資料:

1、建立網路通道datagramSocket,構造器不需寫入

2、建立資料包 datagramPacket,構造方法裡面包含需要寫入的位元組陣列,偏移量,目標地址,目標埠號,當然也可以通過set方式設定目標地址地址等資訊

3、傳送資料報 (datagramPacket);

public static void main(String[] args) throws IOException {

//建立一個網路通道

DatagramSocket datagramSocket = new DatagramSocket();

//將資料打包成資料報包

String message="nnnnnn";

DatagramPacket datagramPacket = new DatagramPacket(

ytes(), ytes()th,

yName(""),

2345);

(datagramPacket);

e();

}

3、UDP多播廣播

傳送資料:

1、建立多播廣播通道 new MulticastSocket( );

2、獲取組播地址並將廣播加入此地址 Group( yName("") );

3、構建datagramPacket,包含byte[]的內容,byte[]長度,ip,埠號。當然可以不用在構建方法新增ip和埠號。

4、傳送訊息:(datagramPacket);

public static void main(String[] args) throws IOException {

MulticastSocket multicastSocket = new MulticastSocket();

InetAddress group = yName("");

Group(group);

String content = "刷屏100遍";

DatagramPacket dp = new DatagramPacket(ytes(),ytes()th);

ddress(group);

ort(2426);

(dp);

}

接收資料:阻塞式,需要單獨作為一個執行緒

1、建立多播廣播通道:new MuliticastSocket(2426); 構造方法應當包含開啟的埠號

2、獲取廣播地址,並加入此廣播地址 Group(yName(""));

3、建立你個空的[]陣列。和一個datdagramPacke物件。包含btye[]相關資訊

4、接收資料:ive(datagramPacket);

5、讀取datagramPacket內容:利用String的構造方法

public static void main(String[] args) throws IOException {

MulticastSocket ms= new MulticastSocket(2426);

InetAddress group = yName("");

Group(group);

byte[] b = new byte[1024];

while (true) {

DatagramPacket datagramPacket = new DatagramPacket(b, th);

ive(datagramPacket);//接受資料

String string = new String(ata(), ffset(),

ength());

tln(ddress()+"" + string);

}

4、NIO

NIO是jdk1.4之後引入的一套全新的IO API,處理資料的方式不同於傳統IO,傳統IO的處理資料的方式以位元組為單位,而NIO是一個Buffer(資料塊) 為單位,傳統IO屬於阻塞式(流在讀取資料時如果未讀到時,程式會處於阻塞狀態);而NIO的處理的方式為非阻塞式方式允許(底層為訊號通訊),NIO可以在單執行緒應用中處理多個客戶請求。