日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java socket oc_Java Socket编程(三) 服务器Sockets

發布時間:2023/12/20 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java socket oc_Java Socket编程(三) 服务器Sockets 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章來源:aspcn 作者:孫雯

服務器Sockets

列表9.2是一個服務器應用程序的一部分.

列表9.2 一個簡單的服務器程序

/**

* 一個監聽端口并提供HTML文檔的程序.

*/

class SimpleWebServer {

public static void main(String args[])

{

ServerSocket serverSocket = null;

Socket clientSocket = null;

int connects = 0;

try

{

{

// 建立一個服務器socket

serverSocket = new ServerSocket(80, 5);

while (connects < 5)

{

// 等待連接

clientSocket = serverSocket.accept();

//服務連接

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());

//格式化輸出(回應頭和很少的HTML文檔)

StringBuffer buffer = PrepareOutput();

String inputLine;

while ((inputLine = inbound.readLine()) != null)

{

//如果到了HTTP請求的尾部,就發送回應

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();

}

}

服務器并不是主動地建立連接.相反地,他們是被動地監聽一個客戶端的連接請示然后給他們服務.服務器是由類ServerSocket來建立的.下面的程序建立了一個服務器端socket并把它綁定到80端口:

ServerSocket serverSocket = new ServerSocket(80, 5);

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

ServerSocket serverSocket = new ServerSocket(80, 5);

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

Socket clientSocket = serverSocket.accept();

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

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

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

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

所有的服務器都要有以下的基本的步驟:

1.建立一個服務器socket并開始監聽.

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

3.建立輸入和輸出流.

4.在已有的協議上產生會話.

5.關閉客戶端流和socket.

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

7.關閉服務器socket.

總結

以上是生活随笔為你收集整理的java socket oc_Java Socket编程(三) 服务器Sockets的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。