day12網路程式設計
一, 網路通訊協議
tcp/ip協議中的四層分別是應用層、傳輸層、網路層和鏈路層,每層分別負責不同的通訊功能.
鏈路層:鏈路層是用於定義物理傳輸通道,通常是對某些網路連線裝置的驅動協議,例如針對光纖、網線提供的驅動。
網路層:網路層是整個tcp/ip協議的核心,它主要用於將傳輸的資料進行分組,將分組資料傳送到目標計算機或者網路。
運輸層:主要使網路程式進行通訊,在進行網路通訊時,可以採用tcp協議,也可以採用udp協議。
應用層:主要負責應用程式的協議,例如httpftp.
1ip位址和埠號
ip位址,它可以唯一標識一台計算機
通過ip位址可以連線到指定計算機,但如果想訪問目標計算機中的某個應用程式,還需要指定埠號,計算機中,不同的應用程式是通過埠號區分的。埠號是用兩個位元組(16位的二進位制數)表示的,它的取值範圍是065535,其中,01023之間的埠號用於一些知名的網路服務和應用,使用者的普通應用程式需要使用1024以上的埠號,從而避免埠號被另外乙個應用或服務所占用。
1.2inetaddress類
public class example01
}
二,tcp:transmission control protocol 稱為傳輸控制協議
tcp通訊是嚴格區分客戶端與伺服器端的,在通訊時,必須先由客戶端去連線伺服器端才能實現通訊,伺服器端不可以主動連線客戶端,並且伺服器端程式需要事先啟動,等待客戶端的連線。
在jdk中提供了兩個類用於實現tcp程式,乙個是serversocket類,用於表示伺服器端,乙個是socket類,用於表示客戶端。
通訊時,首先建立代表伺服器端的serversocket物件,該物件相當於開啟乙個服務,並等待客戶端的連線,然後建立代表客戶端的socket物件向伺服器端發出連線請求,伺服器端響應請求,兩者建立連線開始通訊。
2.1serversocket
serversocket(int port): 建立繫結到特定埠的伺服器套接字
使用構造方法在建立serversocket物件使時,就可以使其繫結到乙個指定的埠號上(引數port就是埠號)。
方法:
socket accept() 偵聽並接受到此套接字的連線
inetaddress getinetaddress() 返回此伺服器套接字的本地位址
serversocket物件負責監聽某台計算機的某個埠號,在建立serversocket物件後,需要繼續呼叫該物件的accept()方法,接收來自客戶端的請求。當執行了accept()方法之後,伺服器端程式會發生阻塞,直到客戶端發出連線請求,accept()方法才會返回乙個scoket物件用於和客戶端實現通訊,程式才能繼續向下執行。
2.2,socket類
構造方法:
socket(string host,int port) 建立乙個流套接字並將其連線到指定主機上的指定埠號
方法宣告功能描述
int getport()
該方法返回乙個int型別物件,該物件是socket物件與伺服器端連線的埠號
inetaddress getlocaladdress()
該方法用於獲取socket物件繫結的本地ip位址,並將ip位址封裝成inetaddress型別的物件返回
void close()
該方法用於關閉socket連線,結束本次通訊。在關閉socket之前,應將與socket相關的所有的輸入/輸出流全部關閉,這是因為乙個良好的程式應該在執行完畢時釋放所有的資源
inputstream getinputstream()
該方法返回乙個inputstream型別的輸入流物件,如果該物件是由伺服器端的socket返回,就用於讀取客戶端傳送的資料,反之,用於讀取伺服器端傳送的資料
outputstream getoutputstream()
該方法返回乙個outputstream型別的輸出流物件,如果該物件是由伺服器端的socket返回,就用於向客戶端傳送資料,反之,用於向伺服器端傳送資料
在socket類的常用方法中,getinputstream()和getoutstream()方法分別用於獲取輸入流和輸出流。當客戶端和服務端建立連線後,資料是以io流的形式進行互動的,從而實現通訊。
[外鏈轉存失敗(img-ty74zprn-1565696626270)(c:\users\李紅興\desktop\markdow筆記\5.png)]
要實現tcp通訊需要建立乙個伺服器端程式和乙個客戶端程式,為了保證資料傳輸的安全性,首先需要實現伺服器端程式。
/* * tcp 伺服器端
* * 1,建立伺服器serversocket物件(指定伺服器端口號)
* 2,開啟伺服器了,等待客戶端的連線,當客戶端連線後,可以獲取到連線伺服器的客戶端socket物件
* 3,給客戶端反饋資訊
* 4,關閉流資源
*/public class tcpserver
}完成了伺服器端程式的編寫,接下來編寫客戶端程式。
/* * tcp 客戶端
* * 1,建立客戶端socket物件,(指定要連線的伺服器位址與埠號)
* 2,獲取伺服器端的反饋回來的資訊
* 3,關閉流資源
*/public class tcpclient
}
檔案上傳案例一:
/*
* 檔案上傳 伺服器端
* */
public class tcpserver
//-----------------反饋資訊---------------------
//10,獲取socket的輸出流, 作用:寫反饋資訊給客戶端
outputstream out = clientsocket.getoutputstream();
//11,寫反饋資訊給客戶端
out.write("上傳成功".getbytes());
out.close();
fileout.close();
in.close();
clientsocket.close();
}} 編寫客戶端,完成上傳
/* * 檔案上傳 客戶端
* * public void shutdownoutput() 禁用此socket的輸出流,間接的相當於告知了伺服器資料寫入完畢
*/public class tcpclient
//6,客戶端傳送資料完畢,結束socket輸出流的寫入操作,告知伺服器端
socket.shutdownoutput();
//-----------------反饋資訊---------------------
//12,獲取socket的輸入流 作用: 讀反饋資訊
inputstream in = socket.getinputstream();
//13,讀反饋資訊
byte info = new byte[1024];
//把反饋資訊儲存到info陣列中,並記錄位元組個數
int length = in.read(info);
//顯示反饋結果
system.out.println( new string(info, 0, length) );
//關閉流
in.close();
filein.close();
out.close();
socket.close();
}}
檔案上傳案例二:
public class filecilent01
//關閉流
out.close();
socktclient.close();
fis.close();
}}public class filecilent
//關閉流
out.close();
socktclient.close();
fis.close();
}}public class filereceive
accept.close();
in.close();
fos.close();
}catch (ioexception e)
}}.start();}}
}
}
accept.close();
in.close();
fos.close();
}catch (ioexception e)
}}.start();
}}
12 網路程式設計
httpget和httppost的使用步驟 1.建立httpget或httppost物件,將要請求的url通過構造方法傳入httpget或httppost物件。2.使用defaulthttpclient.execute方法傳送http get或http post請求,並返回httpresponse物...
C程式設計基礎day12
r 是每次輸出都在最左端。fflush stdout 因為列印的時候不會立即放在螢幕,而是先放在記憶體,再放到快取區等到快取區滿了的時候才放在螢幕。呼叫這個函式後即便快取區沒滿也會將printf的內容顯示到螢幕上。使用快取區是為了提高效率,避免太頻繁地從記憶體往螢幕寫東西,而是先把要顯示的東西存到快...
牛客網錯題 Day12
date 2020 9 25 6 46 stringbuffer public class test16 stringbuffer stringbuffer和stringbuilder的預設大小為16 arraylist和linkedlist的預設大小10 節點流 可以從或向乙個特定地方讀寫資料。檔...