1. 鐤鐙侸ava璁蹭箟錛氫嬌鐢⊿ervletSocket鍒涘緩TCP鏈嶅姟鍣ㄧ
銆銆 浣跨敤ServletSocket鍒涘緩TCP鏈嶅姟鍣ㄧ
銆銆浠庡浘 涓鐪嬩笂鍘籘CP閫氫俊鐨勪袱涓閫氫俊瀹炰綋涔嬮棿騫舵病鏈夋湇鍔″櫒絝 瀹㈡埛絝涔嬪垎 浣嗛偅鏄涓や釜閫氫俊瀹炰綋宸茬粡寤虹珛鉶氭嫙閾捐礬涔嬪悗鐨勭ず鎰忓浘 鍦ㄤ袱涓閫氫俊瀹炰綋娌℃湁寤虹珛鉶氭嫙閾捐礬涔嬪墠 蹇呴』鏈変竴涓閫氫俊瀹炰綋鍏堝仛鍑 涓誨姩濮挎 涓誨姩鎺ユ敹鏉ヨ嚜鍏朵粬閫氫俊瀹炰綋鐨勮繛鎺ヨ鋒眰
銆銆java涓鑳芥帴鍙楀叾浠栭氫俊瀹炰綋榪炴帴璇鋒眰鐨勭被鏄瘲erverSocket ServerSocket瀵硅薄鐢ㄤ簬鐩戝惉鏉ヨ嚜瀹㈡埛絝鐨凷ocket榪炴帴 濡傛灉娌℃湁榪炴帴 瀹冨皢涓鐩村勪簬絳夊緟鐘舵 ServerSocket鍖呭惈涓涓鐩戝惉鏉ヨ嚜瀹㈡埛絝榪炴帴璇鋒眰鐨勬柟娉
銆銆Socket accept錛堬級 濡傛灉鎺ユ敹鍒頒竴涓瀹㈡埛絝瘲ocket鐨勮繛鎺ヨ鋒眰 璇ユ柟娉曞皢榪斿洖涓涓涓庡㈡埛絝瘲ocket瀵瑰簲鐨凷ocket錛堝傚浘 鎵紺烘瘡涓猅CP榪炴帴鏈変袱涓猄ocket錛 鍚﹀垯璇ユ柟娉曞皢涓鐩村勪簬絳夊緟鐘舵 綰跨▼涔熻闃誨
銆銆涓轟簡鍒涘緩ServerSocket瀵硅薄 ServerSocket綾繪彁渚涗簡濡備笅鍑犱釜鏋勯犲櫒
銆銆ServerSocket錛坕nt port錛 鐢ㄦ寚瀹氱殑絝鍙port鏉ュ壋寤轟竴涓猄erverSocket 璇ョ鍙e簲璇ユ槸鏈変竴涓鏈夋晥鐨勭鍙f暣鏁板 ~
銆銆ServerSocket錛坕nt port int backlog錛 澧炲姞涓涓鐢ㄦ潵鏀瑰彉榪炴帴闃熷垪闀垮害鐨勫弬鏁癰acklog
銆銆ServerSocket錛坕nt port int backlog InetAddress localAddr錛 鍦ㄦ満鍣ㄥ瓨鍦ㄥ氫釜 IP鍦板潃鐨勬儏鍐典笅 鍏佽擱氳繃localAddr榪欎釜鍙傛暟鏉ユ寚瀹氬皢ServerSocket緇戝畾鍒版寚瀹氱殑IP鍦板潃
銆銆褰揝erverSocket浣跨敤瀹屾瘯 搴斾嬌鐢⊿erverSocket鐨刢lose錛堬級鏂規硶鏉ュ叧闂璇ServerSocket 閫氬父鎯呭喌涓 鏈嶅姟鍣ㄤ笉搴旇ュ彧鎺ュ彈涓涓瀹㈡埛絝璇鋒眰 鑰屽簲璇ヤ笉鏂鍦版帴鍙楁潵鑷瀹㈡埛絝鐨勬墍鏈夎鋒眰 鎵浠Java紼嬪簭閫氬父浼氶氳繃寰鐜 涓嶆柇鍦拌皟鐢⊿erverSocket鐨刟ccept錛堬級鏂規硶 濡備笅浠g爜鐗囨墊墍紺
銆銆//鍒涘緩涓涓猄erverSocket 鐢ㄤ簬鐩戝惉瀹㈡埛絝瘲ocket鐨勮繛鎺ヨ鋒眰
銆銆ServerSocket ss = new ServerSocket錛 錛
銆銆//閲囩敤寰鐜涓嶆柇鎺ュ彈鏉ヨ嚜瀹㈡埛絝鐨勮鋒眰
銆銆while 錛坱rue錛
銆銆{
銆銆//姣忓綋鎺ュ彈鍒板㈡埛絝瘲ocket鐨勮鋒眰 鏈嶅姟鍣ㄧ涔熷瑰簲浜х敓涓涓猄ocket
銆銆Socket s = ss accept錛堬級
銆銆//涓嬮潰灝卞彲浠ヤ嬌鐢⊿ocket榪涜岄氫俊浜
銆銆鈥
銆銆}
銆銆涓婇潰紼嬪簭涓鍒涘緩ServerSocket娌℃湁鎸囧畾IP鍦板潃 鍒欒ServerSocket灝嗕細緇戝畾鍒版湰鏈洪粯璁ょ殑IP鍦板潃 紼嬪簭涓浣跨敤 浣滀負璇ServerSocket鐨勭鍙e彿 閫氬父鎺ㄨ崘浣跨敤 浠ヤ笂鐨勭鍙 涓昏佹槸涓轟簡閬垮厤涓庡叾浠栧簲鐢ㄧ▼搴忕殑閫氱敤絝鍙e啿紿
榪斿洖鐩褰 鐤鐙侸ava璁蹭箟
緙栬緫鎺ㄨ崘
Java紼嬪簭鎬ц兘浼樺寲 璁╀綘鐨凧ava紼嬪簭鏇村揩 鏇寸ǔ瀹
鏂版墜瀛Java 緙栫▼
lishixin/Article/program/Java/hx/201311/27266
2. 瘋狂Java講義的源碼如何導入eclipse運行
Java項目的源代碼通過一下四部完成導入到eclipse
1、單擊eclipse的file菜單 ,選擇 import project from file system
2、在彈出的窗口單擊 diretory 按鈕 選擇Java源代碼文件系統所在的目錄
3、單擊「選擇文件夾 」完成將java源代碼導入到eclispe系統
你明白了嗎?
3. 瘋狂Java講義:使用DatagramSocket發送、接收數據[2]
程序客戶端代碼也與此類似 客戶端採用循環不斷地讀取用戶鍵盤輸入 每當讀到用戶輸入內容後就將該內容封裝成DatagramPacket數據報 再將該數據報發送出去 接著把DatagramSocket中的數據讀入接收用的DatagramPacket中(實際上是讀入該DatagramPacket所封裝的位元組數組中) 客旁和戶端代碼如下
程序清單 codes/ / /UdpClient java
public class UdpClient
{
//定義發送數據報的目的地
public static final int DEST_PORT = ;
public static final String DEST_IP = ;
//定義每個數據報的最大大小為 K
private static final int DATA_LEN = ;
//定義該客戶端使用的DatagramSocket
private DatagramSocket socket = null;
//定義接收網路數據的位元組數組
byte[] inBuff = new byte[DATA_LEN];
//以指定位元組數組創建准攔兄備接受數據的DatagramPacket對象
private DatagramPacket inPacket =
new DatagramPacket(inBuff inBuff length)
//定義一個用於發送的DatagramPacket對象
private DatagramPacket outPacket = null;
public void init()throws IOException
{
try
{
//創建一個客戶端DatagramSocket 使用隨機埠
socket = new DatagramSocket()
//初始化發送用的DatagramSocket 它包含一個長度為 的位元組數組
簡啟襲outPacket = new DatagramPacket(new byte[ ]
InetAddress getByName(DEST_IP) DEST_PORT)
//創建鍵盤輸入流
Scanner scan = new Scanner(System in)
//不斷讀取鍵盤輸入
while(scan hasNextLine())
{
//將鍵盤輸入的一行字元串轉換位元組數組
byte[] buff = scan nextLine() getBytes()
//設置發送用的DatagramPacket里的位元組數據
outPacket setData(buff)
//發送數據報
socket send(outPacket)
//讀取Socket中的數據 讀到的數據放在inPacket所封裝的位元組數組里
socket receive(inPacket)
System out println(new String(inBuff
inPacket getLength()))
}
}
//使用finally塊保證關閉資源
finally
{
if (socket != null)
{
socket close()
}
}
}
public static void main(String[] args)
throws IOException
{
new UdpClient() init()
}
}
上面程序的粗體字代碼同樣也是通過DatagramSocket發送 接收DatagramPacket的關鍵代碼 這些代碼與伺服器的代碼基本相似 而客戶端與伺服器端的唯一區別在於 伺服器所在IP地址 埠是固定的 所以客戶端可以直接將該數據報發送給伺服器 而伺服器則需要根據接收到的數據報來決定將 反饋 數據報的目的地
讀者可能會發現 使用DatagramSocket進行網路通信時 伺服器端無須 也無法保存每個客戶端的狀態 客戶端把數據報發送到伺服器後 完全有可能立即退出 但不管客戶端是否退出 伺服器無法知道客戶端的狀態
當使用UDP協議時 如果想讓一個客戶端發送的聊天信息可被轉發到其他所有客戶端則比較困難 可以考慮在伺服器使用Set來保存所有客戶端信息 每當接收到一個客戶端的數據報之後 程序檢查該數據報的源SocketAddress是否在Set集合中 如果不在就將該SocketAddress添加到該Set集合中 但這樣一來又涉及一個問題 可能有些客戶端發送一個數據報之後永久性地退出了程序 但伺服器端還將該客戶端的SocketAddress保存在Set集合中……總之 這種方式需要處理的問題比較多 編程比較煩瑣 幸好Java為UDP協議提供了MulticastSocket類 通過該類可以輕松實現多點廣播
返回目錄 瘋狂Java講義
編輯推薦
Java程序性能優化 讓你的Java程序更快 更穩定
新手學Java 編程
Java程序設計培訓視頻教程
lishixin/Article/program/Java/hx/201311/27260
4. 誰有那個瘋狂Android講義第四版啊
Java4Android(Mars老師)網路網盤免費資源在線學習
鏈接: https://pan..com/s/1_mGoGaL7O6mpTc48nhVLqA
Java4Android(Mars老師) 53_綜合練習(四)_src.zip 53_綜合練習(四).mp4 52_綜合練習(三).mp4 51_綜合練習(二)_src.zip 51_綜合練習(二).mp4 50_綜合練習(一).mp4 49_開發工具之Eclipse(四).mp4 48_開發工具之Eclipse(三).mp4 47_開發工具之Eclipse(二).mp4 46_開發工具之Eclipse(一).mp4 45_hashCode()與toString().mp4 44_equals函數的作用.mp4 43_類集框架(三).mp4 42_類集框架(二).mp4