《Java從入門到放棄》JavaSE入門篇:網路編程(入門版),
要進行網路編程,首先要搞清楚目的是什麼。
網路編程說簡單點就是在網路上的電腦進行資料的互動。
既然要進行資料互動,那就需要有一個發送方和一個接受方。
按網路上的說法,就是一個攻一個受·
當然,現階段網上的電腦一般來說都是既接受資料,也能發送資料的,所以說這些電腦都是“插座型”的,進可攻,退可受!!!
好吧,還是使用專業點的名字吧:用戶端/伺服器。
那麼具體到兩台電腦,它們是如何來互動資料的呢?請看:
從步驟來分析:
一、伺服器端程式
1.1建立一個伺服器通訊端(ServerSocket),並綁定到指定連接埠。
1.2偵聽來自用戶端的請求,如果接受到串連則返回通訊端對象(socket)。
1.3獲得輸入/輸出流,也就是進行資料的接收或發送。
1.4關閉通訊端(socket)。
二、用戶端程式
2.1建立一個通訊端,向伺服器指定商品發送請求。
2.2與伺服器正確串連後開始資料的接收或發送。
2.3關閉通訊端。
步驟分析完了,接下來就是實施了。
伺服器端代碼如下:
| 123456789101112131415161718192021222324252627282930313233 |
public class MyServer { private static final int SERVER_PORT = 9527; // 指定偵聽連接埠 public MyServer() { try { ServerSocket ss = new ServerSocket(SERVER_PORT); // 建立伺服器通訊端 System.out.println("服務端已啟動,正在等待用戶端..."); Socket s = ss.accept(); // 偵聽來自用戶端的請求 InputStream in = s.getInputStream(); // 獲得輸入資料流,用來接收資料 OutputStream out = s.getOutputStream(); // 獲得輸出資料流,用來發送資料 byte[] buf = new byte[1024]; // 資料緩衝 int len = in.read(buf); // 從輸入資料流中讀取資料 String strFromClient = new String(buf, 0, len); System.out.print("來自用戶端的資訊>>"); System.out.println(strFromClient); String strToClient = "我也很好!"; out.write(strToClient.getBytes()); // 往輸出資料流中發送資料 // 關閉輸入資料流和輸出資料流 in.close(); out.close(); // 關閉通訊通訊端和伺服器通訊端 s.close(); ss.close(); System.out.println("服務端已關閉。"); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { MyServer ms = new MyServer(); }} |
用戶端代碼如下:
| 12345678910111213141516171819202122232425262728293031 |
public class MyClient { private static final int SERVER_PORT = 9527; //伺服器的偵聽連接埠 public MyClient() { try { //由於服務端也是運行在本機,所以建立原生InetAddress對象 InetAddress address = InetAddress.getByName("localhost"); Socket s = new Socket(address, SERVER_PORT); //向伺服器偵聽連接埠發出請求 System.out.println("用戶端已啟動。"); InputStream in = s.getInputStream(); //獲得輸入資料流,用來接收資料 OutputStream out = s.getOutputStream(); //獲得輸出資料流,用來發送資料 String strToServer = "你好!"; out.write(strToServer.getBytes()); //往輸出資料流中發送資料 byte[] buf = new byte[1024]; int len = in.read(buf); //從輸入資料流中讀取資料 String strFromServer = new String(buf, 0, len); System.out.print("來自服務端的回答>>"); System.out.println(strFromServer); in.close();out.close(); //關閉輸入資料流和輸出資料流 s.close(); //關閉通訊通訊端 System.out.println("用戶端已關閉。"); } catch (UnknownHostException nhe) { System.out.println("未找到指定主機..."); } catch (IOException ioe) { ioe.printStackTrace(); } } public static void main(String[] args) { MyClient mc = new MyClient(); }} |
先運行伺服器端
再運行用戶端,可以探索服務器端的內容發生了變化
再切換到用戶端的輸出視窗
用戶端的輸出內容如下:
有興趣的看官可以修改代碼,讓它變成可以從控制台反覆輸入文字來互動。研究得更深些的朋友,可以嘗試傳送檔案。
網路編程最基本的內容到這兒就結束了,此處應有點贊!!!
“軟體思維”部落格地址:51CTO,部落格園,感興趣的小夥伴可以去看相關的其它博文。