欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Socket編程(三) 服務(wù)器Sockets

 更新時(shí)間:2006年12月23日 00:00:00   作者:  
文章來源:aspcn 作者:孫雯

服務(wù)器Sockets

列表9.2是一個(gè)服務(wù)器應(yīng)用程序的一部分.

列表9.2 一個(gè)簡(jiǎn)單的服務(wù)器程序

/**
* 一個(gè)監(jiān)聽端口并提供HTML文檔的程序.
*/
class SimpleWebServer {
public static void main(String args[])
{
ServerSocket serverSocket = null;
Socket clientSocket = null;
int connects = 0;
try
{
{
// 建立一個(gè)服務(wù)器socket
serverSocket = new ServerSocket(80, 5);
while (connects < 5)
{
// 等待連接
clientSocket = serverSocket.accept();
//服務(wù)連接
ServiceClient(clientSocket);
connects++;
}
serverSocket.close();
}
catch (IOException ioe)
{
System.out.println("Error in SimpleWebServer: " + ioe);
}
}
public static void ServiceClient(Socket client)
throws IOException
{
DataInputStream inbound = null;
DataOutputStream outbound = null;
try
{
// 得到IO流
inbound = new DataInputStream( client.getInputStream());
outbound = new DataOutputStream( client.getOutputStream());
//格式化輸出(回應(yīng)頭和很少的HTML文檔)
StringBuffer buffer = PrepareOutput();
String inputLine;
while ((inputLine = inbound.readLine()) != null)
{
//如果到了HTTP請(qǐng)求的尾部,就發(fā)送回應(yīng)
if ( inputLine.equals("") )
{
outbound.writeBytes(buffer.toString());
break;
}
}
}
finally
{
// 清除
System.out.println("Cleaning up connection: " + client);
tln("Cleaning up connection: " + client);
outbound.close();
inbound.close();
client.close();
client.close();
}
}
服務(wù)器并不是主動(dòng)地建立連接.相反地,他們是被動(dòng)地監(jiān)聽一個(gè)客戶端的連接請(qǐng)示然后給他們服務(wù).服務(wù)器是由類ServerSocket來建立的.下面的程序建立了一個(gè)服務(wù)器端socket并把它綁定到80端口:

ServerSocket serverSocket = new ServerSocket(80, 5);

第一個(gè)參數(shù)是服務(wù)器要監(jiān)聽的端口.第二個(gè)參數(shù)是可選的.API文檔中說明了這是一個(gè)監(jiān)聽時(shí)間,但是在傳統(tǒng)的socket程序中第二個(gè)參數(shù)是監(jiān)聽深度.一個(gè)服務(wù)器可以同時(shí)接收多個(gè)連接請(qǐng)求,但是每次只能處理一個(gè).監(jiān)聽堆是一個(gè)無回答的連接請(qǐng)求隊(duì)列.上面的請(qǐng)求建立一個(gè)連接來處理最后五個(gè)請(qǐng)求.如果省略了后面的一個(gè)參數(shù),則默認(rèn)值是50.

ServerSocket serverSocket = new ServerSocket(80, 5);

一旦socket建立了并開始監(jiān)聽連接,進(jìn)來的連接將會(huì)建立并放在監(jiān)聽堆.accetp()方法把在堆中的連接取出來.

Socket clientSocket = serverSocket.accept();

這個(gè)方法返回一個(gè)用來與來訪者對(duì)話的客戶端連接.服務(wù)器本身不可能建立對(duì)話,相反地,服務(wù)器socket會(huì)使用accept()方法來產(chǎn)生一個(gè)新的socket.服務(wù)器socket依舊打開并排列新的連接請(qǐng)求.

與客戶端socket一樣,下面的一步建立輸入和輸出流:

DataInputStream inbound = new DataInputStream( clientSocket.getInputStream() ); DataOutputStream outbound = new DataOutputStream( clientSocket.getOutputStream() );

一般的I/O操作可以在新建的流中運(yùn)用.在服務(wù)器回應(yīng)前它等待客戶端發(fā)送一個(gè)空白的行.當(dāng)會(huì)話結(jié)束時(shí),服務(wù)器關(guān)閉流和客戶端socket.如果在隊(duì)列中沒有請(qǐng)示將會(huì)出現(xiàn)什么情況呢?那個(gè)方法將會(huì)等待一個(gè)的到來.這個(gè)行為叫阻塞.accept()方法將會(huì)阻塞服務(wù)器線程直到一個(gè)呼叫到來.當(dāng)5個(gè)連接處理完閉之后,服務(wù)器退出.任何的在隊(duì)列中的呼叫將會(huì)被取消.

所有的服務(wù)器都要有以下的基本的步驟:

1.建立一個(gè)服務(wù)器socket并開始監(jiān)聽.

2.使用accept()方法取得新的連接.

3.建立輸入和輸出流.

4.在已有的協(xié)議上產(chǎn)生會(huì)話.

5.關(guān)閉客戶端流和socket.

6.回到第二步或者到第七步.

7.關(guān)閉服務(wù)器socket.

相關(guān)文章

  • 定時(shí)任務(wù)注解@Scheduled不生效問題及解決

    定時(shí)任務(wù)注解@Scheduled不生效問題及解決

    這篇文章主要介紹了定時(shí)任務(wù)注解@Scheduled不生效問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 關(guān)于泛型擦除問題的解決--Mybatis查詢類型轉(zhuǎn)換

    關(guān)于泛型擦除問題的解決--Mybatis查詢類型轉(zhuǎn)換

    這篇文章主要介紹了關(guān)于泛型擦除問題的解決--Mybatis查詢類型轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Java利用反射實(shí)現(xiàn)文件的讀取操作

    Java利用反射實(shí)現(xiàn)文件的讀取操作

    這篇文章主要介紹了Java利用反射實(shí)現(xiàn)文件的讀取操作,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 一篇文章詳解Java異常處理

    一篇文章詳解Java異常處理

    異常處理是編程語言或計(jì)算機(jī)硬件里的一種機(jī)制,用于處理軟件或信息系統(tǒng)中出現(xiàn)的異常狀況(即超出程序正常執(zhí)行流程的某些特殊條件),這篇文章主要給大家介紹了關(guān)于Java異常處理的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • Java 調(diào)用天氣Webservice詳解及實(shí)例代碼

    Java 調(diào)用天氣Webservice詳解及實(shí)例代碼

    這篇文章主要介紹了Java 調(diào)用天氣Webservice詳解及實(shí)例代碼的相關(guān)資料,這里附實(shí)例代碼,使用java 調(diào)用webservice 的小應(yīng)用,需要的朋友可以參考下
    2016-11-11
  • 利用Java連接Hadoop進(jìn)行編程

    利用Java連接Hadoop進(jìn)行編程

    這篇文章主要介紹了利用Java連接Hadoop進(jìn)行編程,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-06-06
  • Spring Security角色繼承實(shí)現(xiàn)過程解析

    Spring Security角色繼承實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Spring Security角色繼承實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java與SpringBoot對(duì)redis的使用方式

    Java與SpringBoot對(duì)redis的使用方式

    這篇文章主要介紹了Java與SpringBoot對(duì)redis的使用方式,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • Java通過動(dòng)態(tài)代理實(shí)現(xiàn)一個(gè)簡(jiǎn)單的攔截器操作

    Java通過動(dòng)態(tài)代理實(shí)現(xiàn)一個(gè)簡(jiǎn)單的攔截器操作

    這篇文章主要介紹了Java通過動(dòng)態(tài)代理實(shí)現(xiàn)一個(gè)簡(jiǎn)單的攔截器操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 從內(nèi)存模型中了解Java final的全部細(xì)節(jié)

    從內(nèi)存模型中了解Java final的全部細(xì)節(jié)

    關(guān)于final關(guān)鍵字,它也是我們一個(gè)經(jīng)常用的關(guān)鍵字,可以修飾在類上、或者修飾在變量、方法上,以此看來定義它的一些不可變性!像我們經(jīng)常使用的String類中,它便是final來修飾的類,并且它的字符數(shù)組也是被final所修飾的。但是一些final的一些細(xì)節(jié)你真的了解過嗎
    2022-03-03

最新評(píng)論