您好,登錄后才能下訂單哦!
Java 網絡編程:
1、URL、URLConnection、Socket
2、IP:Internet Protocol,用32位長度(4個字節)的二進制數據。
3、IP地址分為五類
A類 政府機構 1.0.0.1 --- 126.255.255.254
B類 中等規模的公司 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地址,用于實現主機名和IP地址之間的轉換。InetAddress類描述了IP地址,并通過Inet4Address和Inet6Address來實現。
5、常用方法:
通過靜態工廠方法定義對象。
static InetAddress getLocalHost() 獲得本地主機的InetAddress對象
static InetAddress getByName(String host) 獲得host指定的InetAddress對象。host可以是主機名、IP、DNS域名
String getHostAddress() 以帶圓點的字符串形式獲取IP地址。
String getHostName() 獲取主機名字
6、TCP/IP層次結構
應用層、傳輸層、網絡層、數據鏈路層
IP:網絡層
TCP:傳輸層
UDP:傳輸層
HTTP:應用層
FTP:應用層
URL:Universal Resource Locator統一資源定位符號。
由如下5部分組成:
<傳輸協議>://<主機名>:<端口>/<文件名>#<引用>
傳輸協議(protocol):有HTTP、FTP、File等
主機名(hostname):指定資源所在的主機名。可以是IP、主機名或域名
端口號(port):用來區分一個計算機中提供的不同服務,如web服務、FTP服務,每一個服務都用一個端口號。0 ~ 65535, 端口省略時,網站默認是80。 0~1023 是系統保留的端口號,所以盡量使用1024以上的。
文件名(filename):包括該文件的完整路徑。 默認的文件名是index.html
引用(regerence):對資源內的某個引用,如http://www.google.com/index.html#chapter1.ppt
7、URL 類
URL url = new URL("http://www.baidu.com");
public String getProtocol() URL 協議
public String getHost() URL 的主機名
public int getPort() URL 的端口
public String getFile() URL的文件名
public String getContent() 傳輸協議
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、創建URL對象
2、使用URL 對象的openStream() 方法,返回一個InputStream
3、從InputStream讀入即可。
9、URLConnection 表示應用程序和URL所標識的資源之間的通信連接,它是一個抽象類
url.openConnection()
void connect()
Object getContent() 獲取該URL的內容
int getContentLength() 獲取響應數據的內容長度
String getContentType() 獲取響應數據的內容類型。
long getDate() 獲取響應數據的創建時間
long getExpiration() 獲取響應數據的終止時間
getInputStream()獲取該連接的輸入流
getLastModified() 獲取響應數據的最后修改時間
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協議的編程接口,一個Socket 由一個IP地址和一個端口號唯一確定。網絡上運行在兩個不同主機的進程間進行雙向通信的端點,用于建立兩個不同應用程序之間通過網絡進行通信的信道。
位于不同主機的應用進程之間要在網絡環境下進行通信,必須要在網絡的每一段都要建立一個套接字。
數據流套接字(Stream Socket) 有連接、可靠、雙向、持續、點對點, 速度慢 代表是TCP
數據包套接字(Datagram Socket)無連接。代表是UDP
11、Socket 類
用構造函數創建一個客戶端套接字對象。
close() 關閉套接字連接
InetAddress getInetAddress() 獲取當前連接的遠程主機的Internet地址
InputStream getInputStream() 獲取Socket對應的輸入流
InetAddress getLocalAddress() 獲取本地主機的Internet地址
int getLocalPort() 獲取本地連接的端口號
OutputStream getOutputStream() 獲取該Socket的輸出流
int getPort() 獲取遠程主機的端口號
void shutdownInput() 關閉輸入流
void shutdownOutput()
12、ServerSocket 類
用在服務器端,用來監聽所有來自指定端口的連接,并未每個新的連接創建一個Socket對象。
ServerSocket(int port) 創建一個連接socket
ServerSocket(int port ,int backlog):創建一個監聽socket
ServerSocket(int port, int backlog,InetAddress bindAddr) 監聽socket
Socket accept() 接受連接并返回一個socket對象。
void close()
InetAddress getInetAddress() 獲取該服務器Socket 所綁定的地址
int getLocalPort() 獲取該服務器Socket所偵聽的端口號
int getSoTimeout() 獲取連接的超時數
void setSoTimeout(int timeout)表示 ServerSocket的accept()方法等待客戶連接的超時時間。如果參數值未0,表示永遠不會超時,進入阻塞狀態。
13、Socket通信:
服務器端構造一個ServerSocket對象,在制定端口上進行監聽,這時,服務器的線程處于等待狀態。
然后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("服務器端輸出內容:" + str);
buf.close();
client.close();
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。