《Java從入門到放棄》JavaSE入門篇:網絡編程(入門版)

要進行網絡編程,首先要搞清楚目的是什麼。java

網絡編程說簡單點就是在網絡上的計算機進行數據的交互。編程

wKiom1nDU8jBR29DAADRe0E88II285.png

既然要進行數據交互,那就須要有一個發送方和一個接受方。緩存

按網絡上的說法,就是一個攻一個受·j_0025.gif服務器

固然,現階段網上的電腦通常來講都是既接受數據,也能發送數據的,因此說這些電腦都是「插座型」的,進可攻,退可受!!!網絡

好吧,仍是使用專業點的名字吧:客戶端/服務器socket

 

那麼具體到兩臺電腦,它們是如何來交互數據的呢?請看下圖:spa

wKioL1nDVIrikiO8AACwoz0sGOs008.png


從步驟來分析:code

1、服務器端程序對象

    1.1建立一個服務器套接字(ServerSocket),並綁定到指定端口。blog

    1.2偵聽來自客戶端的請求,若是接受到鏈接則返回套接字對象(socket)。

    1.3得到輸入/輸出流,也就是進行數據的接收或發送。

    1.4關閉套接字(socket)。

2、客戶端程序

    2.1建立一個套接字,向服務器指定商品發送請求。

    2.2與服務器正確鏈接後開始數據的接收或發送。

    2.3關閉套接字。

 

步驟分析完了,接下來就是實施了。

服務器端代碼以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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();
     }
}

客戶端代碼以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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();
     }
}

 

先運行服務器端

wKioL1nDWzizH3DqAAAdegLMUa8760.png

 

再運行客戶端,能夠發現服務器端的內容發生了變化

wKiom1nDW9zQWpbWAAAjBpnMi-k530.png

再切換到客戶端的輸出窗口

wKiom1nDXAzAcF5hAABHB78MZ7I848.png

客戶端的輸出內容以下:

wKiom1nDXAzwzJCUAAAfg4FCVAI164.png

 

有興趣的看官能夠修改代碼,讓它變成能夠從控制檯反覆輸入文字來交互。研究得更深些的朋友,能夠嘗試發送文件。

網絡編程最基本的內容到這兒就結束了,此處應有點贊!!!j_0028.gif

 

 「軟件思惟」博客地址:51CTO博客園,感興趣的小夥伴能夠去看相關的其它博文。  

相關文章
相關標籤/搜索