要學會Java網絡編程,首先要对網絡通讯知识有一定的初步的了解,如网络OSI七层模型,常用的網絡協議,如tcp/ip,Http,FTP等協議,讀者可以從網上獲取這些知識,來進一步的了解,有助于Java的網絡編程,在此就不講這些內容了.下我們主要看一下如何在Java中進行網絡編程.
我們現在來實現一個服務器和多個客戶端時行網絡通訊的功能.
1. 使用Eclipse IDE,首先創建一個java項目:MultiThreadSocket 并讓它繼承Thread類
package pa20110201; import java.net.UnknownHostException; /** * * @author Liyongbin * @date 02-01-2011 * */ public class MultiThreadSocket extends Thread{ private Socket socket; public MultiThreadSocket (Socket socket){ this.socket=socket; } }
2. 在這個類中創建兩個靜態方法: server 和 client,分別模擬服務器端和客戶端
/** * 服務器端 */ public static void server(){ try { //創建服務器端的套接字(綁定到8000端口上) ServerSocket ss = new ServerSocket(8000); //我循環等待用戶請求 while (true) { //返回一個套接字 Socket sk =ss.accept(); //創建一個線程 new MultiThreadSocket(sk).start(); } //關閉服務器端套接字 //ss.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 客戶端 */ static void client(){ try { //直接返回IP //Socket s1 = new Socket(InetAddress.getByName("127.0.0.1"),8000); //輸出流 OutputStream os = s1.getOutputStream(); //輸入流 InputStream is = s1.getInputStream(); //定義字節數組 byte [] buffer =new byte[1000]; //從Buffer中讀取數據 int length = is.read(buffer); //將讀取的數打印出來 System.out.println(new String (buffer,0,length)); //往服務器端發送數據 os.write("I'm zhangshan4!".getBytes()); //關閉輸出流 os.close(); //關閉輸入流 is.close(); //關閉套接字 s1.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
3. 重寫Thread的run方法://運行線程 @Override
//運行線程 @Override public void run() { try { //往客戶端發送數據 OutputStream os = socket.getOutputStream(); //從網絡上讀取數據 InputStream is = socket.getInputStream(); //發送Hello world os.write("Hello world!".getBytes()); //定義字節數組 byte [] buffer =new byte[1000]; //從Buffer中讀取數據 int length = is.read(buffer); //將讀取的數打印出來 System.out.println(new String (buffer,0,length)); //關閉輸出流 os.close(); //關閉輸入流 is.close(); //關閉套接字 socket.close(); } catch (Exception e) { e.printStackTrace(); } }
4. 寫一個測方法
public static void main(String[] args) { if (args.length >0) { server(); }else{ client(); } }
5. 項目中所要導入的包如下
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException;
6. 設置啟動項目的參數,如圖所示:
1). 選擇 Run Configurations, 新建兩個啟動項,一個是服務器(MultiThreadSocket _Server),
另一個是客戶端(MultiThreadSocket _Client)
2).在服務器的啟動項上沒置啟動參數(任意),客端啟動項則勿需設置啟動參數,如圖:
3).設置成功后如圖所示:
7. 設置控制臺的顯示:
8. 所有的設置均已完成,可以運行程序了,
首先運行服務器端,然後啟動客戶端,服務端只啟動一次,客戶端可啟動多次,運行結果如下: