最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

服務(wù)器Sockets

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

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

/**
* 一個(gè)監(jiān)聽(tīng)端口并提供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)聽(tīng)一個(gè)客戶端的連接請(qǐng)示然后給他們服務(wù).服務(wù)器是由類ServerSocket來(lái)建立的.下面的程序建立了一個(gè)服務(wù)器端socket并把它綁定到80端口:

ServerSocket serverSocket = new ServerSocket(80, 5);

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

ServerSocket serverSocket = new ServerSocket(80, 5);

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

Socket clientSocket = serverSocket.accept();

這個(gè)方法返回一個(gè)用來(lái)與來(lái)訪者對(duì)話的客戶端連接.服務(wù)器本身不可能建立對(duì)話,相反地,服務(wù)器socket會(huì)使用accept()方法來(lái)產(chǎn)生一個(gè)新的socket.服務(wù)器socket依舊打開(kāi)并排列新的連接請(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ì)列中沒(méi)有請(qǐng)示將會(huì)出現(xiàn)什么情況呢?那個(gè)方法將會(huì)等待一個(gè)的到來(lái).這個(gè)行為叫阻塞.accept()方法將會(huì)阻塞服務(wù)器線程直到一個(gè)呼叫到來(lái).當(dāng)5個(gè)連接處理完閉之后,服務(wù)器退出.任何的在隊(duì)列中的呼叫將會(huì)被取消.

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

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

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

3.建立輸入和輸出流.

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

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

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

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

相關(guān)文章

  • Java +Tomcat + SpringMVC實(shí)現(xiàn)頁(yè)面訪問(wèn)示例解析

    Java +Tomcat + SpringMVC實(shí)現(xiàn)頁(yè)面訪問(wèn)示例解析

    這篇文章主要介紹了Java +Tomcat + SpringMVC實(shí)現(xiàn)頁(yè)面訪問(wèn)示例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java命名規(guī)則詳細(xì)總結(jié)

    Java命名規(guī)則詳細(xì)總結(jié)

    Class名應(yīng)是首字母大寫(xiě)的名詞。命名時(shí)應(yīng)該使其簡(jiǎn)潔而又具有描述性。異常類的命名,應(yīng)以Exception結(jié)尾。Interface的命名規(guī)則與Class相同
    2013-10-10
  • SpringMVC框架使用 Apache POI實(shí)現(xiàn)導(dǎo)出Excel

    SpringMVC框架使用 Apache POI實(shí)現(xiàn)導(dǎo)出Excel

    Excel 作為最常用的數(shù)據(jù)處理工具之一,經(jīng)常被用來(lái)存儲(chǔ)和展示數(shù)據(jù),本文將介紹如何在 SpringMVC 框架中使用 Apache POI 庫(kù)來(lái)實(shí)現(xiàn) Excel 文件的導(dǎo)出功能,有需要的可以參考一下
    2025-04-04
  • Java的@Repeatable注解使用詳細(xì)解析

    Java的@Repeatable注解使用詳細(xì)解析

    這篇文章主要介紹了Java的@Repeatable注解使用詳細(xì)解析,java8新增了注解@Repeatable,在hibernate-validator的源碼注解如@MAX、@NotNull等中,有@Repeatable注解的使用,需要的朋友可以參考下
    2024-02-02
  • SpringBoot項(xiàng)目集成Flyway詳細(xì)過(guò)程

    SpringBoot項(xiàng)目集成Flyway詳細(xì)過(guò)程

    今天帶大家學(xué)習(xí)SpringBoot項(xiàng)目集成Flyway詳細(xì)過(guò)程,文中有非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • 深入解析java中的locale

    深入解析java中的locale

    以下是對(duì)java中的locale進(jìn)行了深入的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • java?啟動(dòng)參數(shù)?springboot?idea詳解

    java?啟動(dòng)參數(shù)?springboot?idea詳解

    這篇文章主要介紹了java?啟動(dòng)參數(shù)?springboot?idea的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • java項(xiàng)目實(shí)現(xiàn)圖片等比縮放

    java項(xiàng)目實(shí)現(xiàn)圖片等比縮放

    這篇文章主要為大家詳細(xì)介紹了java項(xiàng)目實(shí)現(xiàn)圖片等比縮放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Spring?Boot+微信小程序開(kāi)發(fā)平臺(tái)保存微信登錄者的個(gè)人信息

    Spring?Boot+微信小程序開(kāi)發(fā)平臺(tái)保存微信登錄者的個(gè)人信息

    這篇文章主要介紹了Spring?Boot+微信小程序開(kāi)發(fā)平臺(tái)保存微信登錄者的個(gè)人信息,本文主要介紹?wx.login和wx.getProfile接口,因篇幅所限,不能對(duì)其它接口做詳細(xì)介紹?,有興趣者可以查閱官方文檔
    2022-05-05
  • Java 跳出遞歸循環(huán)問(wèn)題解決辦法

    Java 跳出遞歸循環(huán)問(wèn)題解決辦法

    這篇文章主要介紹了 Java 跳出遞歸循環(huán)問(wèn)題解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07

最新評(píng)論

莱芜市| 出国| 克什克腾旗| 长海县| 棋牌| 共和县| 闵行区| 麟游县| 绥芬河市| 扶余县| 开封县| 吉水县| 通辽市| 招远市| 伊宁市| 定边县| 阜宁县| 大石桥市| 景德镇市| 北辰区| 白城市| 宿迁市| 永福县| 东乡族自治县| 安平县| 衡山县| 牟定县| 永和县| 从化市| 高碑店市| 武威市| 洪洞县| 达孜县| 贺兰县| 丰台区| 余庆县| 镇康县| 金寨县| 迁安市| 仙游县| 板桥市|