Java網絡基礎和Socket通信基礎
導語:Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++裏難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。下面我們來看看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可以在單線程應用中處理多個客户請求。
-
10個經典的Java main方法面試題
Java具有簡單性、面向對象、分佈式、健壯性、安全性、平台的獨立與可移植性、多線程、動態性等特點。以下是為大家分享的10個經典的Javamain方法面試題,供大家參考借鑑,歡迎瀏覽!1.不用main方法如何定義一個類?不行,沒有main方法我們不能運行Java類。在Java7之前,...
-
java中反射機制
導語:Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++裏難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。下面我們來看看java中反射機制,希望對大家有所幫助。Java中什麼是反射機制:(JavaReflactioninaction)Java反射...
-
Java語言的學習技巧
知識改變命運,對於Java程序員來説,技術不斷更新,只有及時充電,才能不被市場淘汰。今天小編為大家分享Java程序員學習的6個小技巧。一定要看書現在學習Java變得比以前容易多了,除了有大量的視頻教程外,還有專業的java培訓機構,這都使學習變得更加傻瓜化,然而我要説的是,J...
-
Java讀取郵件的方法
在Java編程設計中,我們如何通過Java讀取郵件呢?下面小編為大家介紹了Java讀取郵件的'方法,希望能幫到大家!複製代碼代碼如下:publicvoidreceive()throwsException{Log.e(tag,"receive()");//sharedpreference讀取數據,用split()方法,分開字符串。SharedPreferencespre...