1.通訊要素:
1.找到對方
ip2.資料要傳送到對方指定的應用程式上,為了標識這些應用程式,所以給這些網路應用程式都用數字進行標識。
為了方便稱呼這個數字,叫做 埠,邏輯埠。
3.定義通訊規則,這個通訊規則成為協議。國際組織定義了通用協議
tcp/ip
。2.一些基本方法:
inetaddress i = inetaddress.getlocalhost();獲取主機物件
i.tosting();返回主機名和主機
ip位址
i.gethostaddress();獲取主機
ip位址
i.gethostname();獲取主機名
*如何獲取其他位址的主機物件。
inetaddress ia = inetaddress.getbyname(string ip);例如
3.udp特點:
1.將資料及源和目的和封裝成資料報中,不需要建立連線;
2.每個資料報的大小限制在
64k內;
3.因無連線,是不可靠協議;
4.不需要建立連線,速度快。
*簡單小例子:
*需求:通過
udp傳輸方式,將一段文字資料傳送出去。
思路:1.建立
udpsocket
服務;2.提供資料,並將資料封裝到資料報中;
3.通過
socket
服務的傳送功能,將資料報發出去;
4.關閉資源。
*傳送端:
public class udpsend
}*需求:定義乙個應用程式,用於接收
udp協議傳輸的資料並處理。
思路:1.定義
udpsocket
服務;2.定義乙個資料報,因為要儲存接收到的位元組資料,因為資料報物件有更多的功能可以提取位元組資料中的不同資料資訊;
3.通過
socket
服務的receive
方法將收到的資料存入已定義好的資料報中;
4.通過資料報物件的特有功能,將這些不同的資料取出,列印在控制台上。
5.關閉資源。
*接收端:
public class udpreceive
}*聊天程式:
編寫乙個聊天程式,有收資料的部分,和發資料的部分。這兩部分需要同時進行。
那就需要用到多執行緒技術,乙個執行緒控制收,乙個執行緒控制發。
因為收和發動作是不一致的,所以要定義兩個run
方法,而且這兩個方法要封裝到不同的類中。
class send implements runnable
public void run()
}catch(exception e)}}
class rece implements runnable
public void run()
}catch (exception e)}}
class chatdemo
}4.tcp特點:
1.建立連線,形成傳輸資料的通道;
2.在連線中進行大資料量傳輸;
3.通過三次握手完成連線,是可靠協議;
4.必須建立連線,效率會稍低。
*客戶端:
通過查閱socket
物件,發現在該物件建立時,就可以去連線指定主機,因為
tcp是面向連線的,所以在建立
socket
服務時,
就要有服務端存在,並連線成功。形成通路後,在該通道進行資料的傳輸。
步驟:1.建立
socket
服務,並指定要連線的主機和埠。
2.獲取
socket
流中的輸出流,將資料寫到該流中,通過網路傳送給服務端。
3.獲取
socket
流中的輸入流,將服務端反饋的資料獲取到,並列印。
4.關閉客戶端資源。
class tcpclient
}需求:定義端點接收資料並列印在控制台上
服務端:
1.建立服務端的
socket
物件,serversocket();
並監聽乙個埠。
2.獲取連線過來的客戶端物件,通過
serversocket
的accept
方法,沒有連線就會等,所以這個方法是阻塞的。
3.客戶端如果發過來資料,那麼服務端要是用對應的客戶端物件,並獲取到該客戶端物件的讀取流來讀取發過來的資料。
4.關閉服務端
(可選,例如大型**,不可能訪問完就關閉
)class tcpserver
}對於結束標記的問題:socket
物件中有結束輸出流方法
shutdownoutput()
; 禁用此套接字的輸出流。
通常情況下,服務端是多執行緒服務的,因為客戶不止乙個,不可能每次只訪問乙個。
如下迴圈模式:
//迴圈接收客戶端,每接收乙個客戶端就開啟乙個執行緒為其服務。
while(true)
5.自定義服務端,客戶端為瀏覽器:
public class serverdemo
}6.url 類:用於解析
url的類
常用方法:
url.getprotocol();獲取協議
url.gethost();獲取主機
url.getport();獲取埠
url.getpath();
url.getfile();
url.getquery();獲取此
url的查詢部分
url url = new url("");
urlconnection conn = url.openconnection();//內部封裝與服務端的連線。並具備解析
url功能
//此後便可使用
urlconnection
物件獲取資料
inputstream in = conn.getinputstream();
7.網域名稱解析原理:
假如訪問www.sina.com.cn
主頁,那麼是如何連線到伺服器的呢?
首先要將主機名翻譯成ip
位址,需要網域名稱解析,
dns網域名稱解析伺服器。
使用者訪問後,首先要到公網找網域名稱解析伺服器,找sina
主機名對應的
ip位址。找到後,
dns伺服器將
ip網域名稱返回
使用者在通過ip
訪問主機。
Java網路程式設計
1,inetaddress表示ip位址的操作類,可以通過此類指定要連線的主機名稱。2,在開發中如果要取得乙個網路資源可以使用url類進行定位,之後使用io流的方式進行讀取。3,使用urlenoder可以為資訊編碼,使用urldecoder可以為編碼的內容進行解碼操作。4,serversoket主要用...
Java網路程式設計
網路程式設計 網路模型 osi open system interconnect 開放式系統互聯,見osi檔案 檢視埠 netstat a n udp 使用者資料報協議,不可靠傳輸 tcp 傳輸控制協議,可靠傳輸 inetaddress inetaddress 開外網測試方便 static inet...
java 網路程式設計
1.ip位址 public static void main string args throws unknownhostexception 2.tcp通訊 主要使用到2個類 socket 客服端 和serversocket 2.1 簡單通訊反饋 客服端給伺服器傳送一條訊息,服務武收到後反饋客服端 ...