您好,登錄后才能下訂單哦!
Java 網(wǎng)絡編程:
1、URL、URLConnection、Socket
2、IP:Internet Protocol,用32位長度(4個字節(jié))的二進制數(shù)據(jù)。
3、IP地址分為五類
A類 政府機構 1.0.0.1 --- 126.255.255.254
B類 中等規(guī)模的公司 128.0.0.1 --- 191.255.255.254
C類 任何人 192.0.0.1 --- 223.255.255.254
D類 組播 224.0.0.1 --- 239.255.255.254
E類 實驗用 240.0.0.1 --- 255.255.255.255
127.0.0.1或Localhost表示本機
4、java中InetAddress 類表示IP地址,用于實現(xiàn)主機名和IP地址之間的轉(zhuǎn)換。InetAddress類描述了IP地址,并通過Inet4Address和Inet6Address來實現(xiàn)。
5、常用方法:
通過靜態(tài)工廠方法定義對象。
static InetAddress getLocalHost() 獲得本地主機的InetAddress對象
static InetAddress getByName(String host) 獲得host指定的InetAddress對象。host可以是主機名、IP、DNS域名
String getHostAddress() 以帶圓點的字符串形式獲取IP地址。
String getHostName() 獲取主機名字
6、TCP/IP層次結構
應用層、傳輸層、網(wǎng)絡層、數(shù)據(jù)鏈路層
IP:網(wǎng)絡層
TCP:傳輸層
UDP:傳輸層
HTTP:應用層
FTP:應用層
URL:Universal Resource Locator統(tǒng)一資源定位符號。
由如下5部分組成:
<傳輸協(xié)議>://<主機名>:<端口>/<文件名>#<引用>
傳輸協(xié)議(protocol):有HTTP、FTP、File等
主機名(hostname):指定資源所在的主機名??梢允荌P、主機名或域名
端口號(port):用來區(qū)分一個計算機中提供的不同服務,如web服務、FTP服務,每一個服務都用一個端口號。0 ~ 65535, 端口省略時,網(wǎng)站默認是80。 0~1023 是系統(tǒng)保留的端口號,所以盡量使用1024以上的。
文件名(filename):包括該文件的完整路徑。 默認的文件名是index.html
引用(regerence):對資源內(nèi)的某個引用,如http://www.google.com/index.html#chapter1.ppt
7、URL 類
URL url = new URL("http://www.baidu.com");
public String getProtocol() URL 協(xié)議
public String getHost() URL 的主機名
public int getPort() URL 的端口
public String getFile() URL的文件名
public String getContent() 傳輸協(xié)議
InputStream openStream() 打開該URL的輸入流
public String getPath 獲取該URL的路徑
URLConnection openConnection() 打開由該URL 表示的位置的連接
void set(string protocol,string host,int port,string file,string ref) 設置該URL的各域的值。
8、使用步驟:
1、創(chuàng)建URL對象
2、使用URL 對象的openStream() 方法,返回一個InputStream
3、從InputStream讀入即可。
9、URLConnection 表示應用程序和URL所標識的資源之間的通信連接,它是一個抽象類
url.openConnection()
void connect()
Object getContent() 獲取該URL的內(nèi)容
int getContentLength() 獲取響應數(shù)據(jù)的內(nèi)容長度
String getContentType() 獲取響應數(shù)據(jù)的內(nèi)容類型。
long getDate() 獲取響應數(shù)據(jù)的創(chuàng)建時間
long getExpiration() 獲取響應數(shù)據(jù)的終止時間
getInputStream()獲取該連接的輸入流
getLastModified() 獲取響應數(shù)據(jù)的最后修改時間
getOutputStream 獲取該連接的輸出流
public class TestNet {
public static void main(String[] args) {
try {
int c;
URL url = new URL("http://skynet.skhynix-cq.com.cn/plusWare/Main.aspx/");
URLConnection urlConnection = url.openConnection();
System.out.println("the date is:" + new Date(urlConnection.getDate()));
System.out.println("content-type:" + urlConnection.getContentType());
InputStream inputStream = urlConnection.getInputStream();
while((c=inputStream.read())!=-1){
System.out.print((char)c);
}
inputStream.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
10、套接字(socket)
套接字是TCP/IP協(xié)議的編程接口,一個Socket 由一個IP地址和一個端口號唯一確定。網(wǎng)絡上運行在兩個不同主機的進程間進行雙向通信的端點,用于建立兩個不同應用程序之間通過網(wǎng)絡進行通信的信道。
位于不同主機的應用進程之間要在網(wǎng)絡環(huán)境下進行通信,必須要在網(wǎng)絡的每一段都要建立一個套接字。
數(shù)據(jù)流套接字(Stream Socket) 有連接、可靠、雙向、持續(xù)、點對點, 速度慢 代表是TCP
數(shù)據(jù)包套接字(Datagram Socket)無連接。代表是UDP
11、Socket 類
用構造函數(shù)創(chuàng)建一個客戶端套接字對象。
close() 關閉套接字連接
InetAddress getInetAddress() 獲取當前連接的遠程主機的Internet地址
InputStream getInputStream() 獲取Socket對應的輸入流
InetAddress getLocalAddress() 獲取本地主機的Internet地址
int getLocalPort() 獲取本地連接的端口號
OutputStream getOutputStream() 獲取該Socket的輸出流
int getPort() 獲取遠程主機的端口號
void shutdownInput() 關閉輸入流
void shutdownOutput()
12、ServerSocket 類
用在服務器端,用來監(jiān)聽所有來自指定端口的連接,并未每個新的連接創(chuàng)建一個Socket對象。
ServerSocket(int port) 創(chuàng)建一個連接socket
ServerSocket(int port ,int backlog):創(chuàng)建一個監(jiān)聽socket
ServerSocket(int port, int backlog,InetAddress bindAddr) 監(jiān)聽socket
Socket accept() 接受連接并返回一個socket對象。
void close()
InetAddress getInetAddress() 獲取該服務器Socket 所綁定的地址
int getLocalPort() 獲取該服務器Socket所偵聽的端口號
int getSoTimeout() 獲取連接的超時數(shù)
void setSoTimeout(int timeout)表示 ServerSocket的accept()方法等待客戶連接的超時時間。如果參數(shù)值未0,表示永遠不會超時,進入阻塞狀態(tài)。
13、Socket通信:
服務器端構造一個ServerSocket對象,在制定端口上進行監(jiān)聽,這時,服務器的線程處于等待狀態(tài)。
然后Client端構造Socket類對象,與服務器上的指定端口進行連接。服務器接收到連接請求后建立連接。通信依靠輸入輸出流進行。
服務端: ServerSocket 對象 -- accept()方法
客戶端:socket 對象。請求連接
Socket類 的getInputStream 和getOutputStream
通信完成后close
public class TestNet {
public static void main(String[] args) throws Exception{
ServerSocket server = null;
Socket pair = null;
PrintStream outPrintStream = null;
server = new ServerSocket(2588);
System.out.println("服務器運行,等待客戶端連接");
pair = server.accept(); // 等待連接
String string = "hello network!";
outPrintStream = new PrintStream(pair.getOutputStream());
outPrintStream.println(string);
pair.close();
server.close();
}
}
// Client
public class Client {
public static void main(String[] args) throws Exception {
Socket client = null;
client = new Socket("localhost",2588); // 新建一個Socket,并進行連接
BufferedReader buf = null;
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = buf.readLine();
System.out.println("服務器端輸出內(nèi)容:" + str);
buf.close();
client.close();
}
}
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。