成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談JAVA中如何利用socket進行網絡編程(一)

開發 后端
所謂socket通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄。應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求。 本文介紹的是JAVA中的socket網絡編程,希望對你有幫助,一起來看。

Socket是網絡上運行的兩個程序間雙向通訊的一端,它既可以接受請求,也可以發送請求,利用它可以較為方便的編寫網絡上的數據的傳遞。在java中,有專門的socket類來處理用戶的請求和響應。利用SOCKET類的方法,就可以實現兩臺計算機之間的通訊。這里就介紹一下在JAVA中如何利用socket進行網絡編程。

在Java中Socket可以理解為客戶端或者服務器端的一個特殊的對象,這個對象有兩個關鍵的方法,一個是getInputStream方法,另一個是getOutputStream方法。getInputStream方法可以得到一個輸入流,客戶端的Socket對象上的getInputStream方法得到的輸入流其實就是從服務器端發回的數據流。GetOutputStream方法得到一個輸出流,客戶端Socket對象上的getOutputStream方法返回的輸出流就是將要發送到服務器端的數據流,(其實是一個緩沖區,暫時存儲將要發送過去的數據)。

程序可以對這些數據流根據需要進行進一步的封裝。本文的例子就對這些數據流進行了一定的封裝(關于封裝可以參考Java中流的實現部分)。

一、建立服務器類

Java中有一個專門用來建立Socket服務器的類,名叫ServerSocket,可以用服務器需要使用的端口號作為參數來創建服務器對象。

  1. ServerSocket server = new ServerSocket(9998

 

這條語句創建了一個服務器對象,這個服務器使用9998號端口。當一個客戶端程序建立一個Socket連接,所連接的端口號為9998時,服務器對象server便響應這個連接,并且server.accept()方法會創建一個Socket對象。服務器端便可以利用這個Socket對象與客戶進行通訊。

  1. Socket incoming = server.accept() 

 

進而得到輸入流和輸出流,并進行封裝

  1. BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));  
  2. PrintWriter out = new PrintWriter(incoming.getOutputStream(),true); 

隨后,就可以使用in.readLine()方法得到客戶端的輸入,也可以使用out.println()方法向客戶端發送數據。從而可以根據程序的需要對客戶端的不同請求進行回應。

在所有通訊結束以后應該關閉這兩個數據流,關閉的順序是先關閉輸出流,再關閉輸入流,即使用:

  1. out.close();  
  2. in.close(); 

 

二、建立客戶端代碼

相比服務器端,客戶端要簡單一些,客戶端只需用服務器所在機器的ip以及服務器的端口作為參數創建一個Socket對象。得到這個對象后,就可以用"建立服務器"部分介紹的方法實現數據的輸入和輸出。

  1. Socket socket = new Socket("168.160.12.42",9998);  
  2. in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  3. out = new PrintWriter(socket.getOutputStream(),true); 

 

以上的程序代碼建立了一個Socket對象,這個對象連接到ip地址為168.160.12.42的主機上、端口為9998的服務器對象。并且建立了輸入流和輸出流,分別對應服務器的輸出和客戶端的寫入。

三、建立用戶界面

讀者可以根據自己的喜好建立自己的用戶界面,這不是本文的重點。

經過以上三個步驟,就可以建立一個比較簡單的對話程序。但是,為了使這個程序更加完善,應進行以下幾個改進:

一、現在服務器只能服務一個客戶,也就是單線程的。可以將它改進為多線程服務器。

  1. try   
  2. { file://建立服務器    
  3.  ServerSocket server = new ServerSocket(9998);    
  4.  int i=1;    
  5.  for(;;)    
  6.  {    
  7.   Socket incoming = server.accept();    
  8.   new ServerThread(incoming,i).start();    
  9.   i++;    
  10.  }    
  11. }catch (IOException ex){ ex.printStackTrace(); }   

循環檢測是否有客戶連接到服務器上,如果有,則創建一個線程來服務這個客戶,這個線程的名稱是ServerThread,這個類擴展了Thread類,它的編寫方法與前述的服務器的寫法相同。

二、為了可以隨時得到對方傳送過來的消息,可以在服務器以及客戶端各建立一個獨立的線程來察看輸入流,如果輸入流中有輸入,則可以即時顯示出來。代碼如下:

  1. new Thread()  
  2. {  
  3.  public void run()  
  4.  {  
  5.   try 
  6.   {   
  7.    while(true)  
  8.    {  
  9.     checkInput();  
  10.     sleep(1000);//每1000毫秒檢測一次  
  11.    }  
  12.   }catch (InterruptedException ex)  
  13.  {  
  14.  }catch(IOException ex)  
  15.  {  
  16.   }  
  17.  }  
  18. }.start(); 

 其中的checkInput()方法為:

  1. private void checkInput() throws IOException  
  2. {  
  3.  String line;  
  4.  if((line=in.readLine())!=null) file://檢測輸入流中是否有新的數據  
  5.   t.setPartner(line); file://將數據流中的消息顯示出來  
  6. }  

通過以上改進,程序就可以比較好的運行了。

希望本文可以幫助到你。

【編輯推薦】

  1. Java開發者需要注意的十條法則
  2. 分享Java連接各種數據庫的實例
  3. 常見的十四種Java開發工具的特點
  4. JavaScript開發規范要求
  5. Java垃圾收集器使用小訣竅
責任編輯:于鐵 來源: 互聯網
相關推薦

2011-06-13 12:11:06

javasocket

2009-06-15 15:17:32

JCOMExcel編程Java

2012-03-19 10:55:27

JavaSocket

2009-06-15 17:45:20

LINQ分組統計

2009-06-17 15:13:57

Java網絡功能編程方法

2013-03-27 13:26:04

Android開發Socket

2011-07-05 10:20:38

java

2010-03-03 16:19:29

Python Sock

2011-04-02 12:52:37

MRTG監控

2009-07-03 11:27:11

JSP編程思想

2015-04-24 09:48:59

TCPsocketsocket編程

2009-05-12 10:36:38

OracleREDO恢復

2012-03-19 11:41:30

JavaSocket

2011-12-07 16:50:29

JavaNIO

2011-06-13 16:51:19

Qt Socket

2025-04-27 04:05:00

AI模型爬蟲

2009-06-26 15:23:19

JSTL

2011-06-13 10:03:19

Qt 多線程 編程

2015-03-10 13:43:00

JavaSocket編程編程

2009-07-16 17:06:55

JSP網頁中JDBC代
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区成人 | 精品一区欧美 | 成人在线免费电影 | 69堂永久69tangcom | 国产成人亚洲精品自产在线 | 国产高清视频一区 | 午夜av影院| 精品视频在线免费观看 | 国产精品免费看 | 成人在线视频一区 | 99久久99热这里只有精品 | 欧美激情a∨在线视频播放 成人免费共享视频 | 日韩在线观看视频一区 | 久久久久久国模大尺度人体 | 中文字幕动漫成人 | 免费看一区二区三区 | 午夜视频免费在线观看 | 国产精品国产a级 | 青青久视频 | 日韩精品二区 | 久草免费在线视频 | 青青久草 | 久久一二| 国产精品久久久久久久久免费樱桃 | 国产午夜精品久久久 | 极品电影院 | 欧美综合国产精品久久丁香 | 日韩成人在线电影 | hsck成人网 | 男人的天堂avav | 亚洲一区国产精品 | 视频一二区| 欧美黄色大片在线观看 | 久久激情av| 伊人手机在线视频 | 婷婷久久综合 | 久久国产精品免费一区二区三区 | 国产亚洲一区精品 | 中文字幕11页 | 日本不卡高字幕在线2019 | 精品不卡 |