国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Win服務(wù)器 > 正文

基于Jave的Web服務(wù)工作機(jī)制(2)

2024-09-10 00:02:51
字體:
供稿:網(wǎng)友
HTTP響應(yīng)(Responses)

  和請求類似,一個(gè)HTTP響應(yīng)也包含三個(gè)部分:

  協(xié)議狀態(tài) 代碼描敘(Protocol-Status code-Description)
  響應(yīng)包頭(Response headers)
  實(shí)體(Entity body)
  下面是HTTP響應(yīng)的一個(gè)簡單范例:

  HTTP/1.1 200 OK
  Server: Microsoft-IIS/4.0
  Date: Mon, 3 Jan 1998 13:13:33 GMT
  Content-Type: text/html
  Last-Modified: Mon, 11 Jan 1998 13:23:42 GMT
  Content-Length: 112

  <html>
  <head>
  <title>HTTP Response Example</title></head><body>
  Welcome to Brainy Software
  </body>
  </html>

  第一行的響應(yīng)包頭和上面的請求包頭很相似。 第一行告訴我們,協(xié)議是使用的HTTP1.1,響應(yīng)請求已成功(200表示成功),一切已OK。

  響應(yīng)包頭和請求包頭相似,也包含一些有用的信息。響應(yīng)的實(shí)體是HTML那一部分的內(nèi)容。包頭和實(shí)體也都是被CRLF序列分離開的。

  Socket類

  套接字(socket)是網(wǎng)絡(luò)連接的一個(gè)端點(diǎn)。它使得應(yīng)用程序能夠通過網(wǎng)絡(luò)進(jìn)行讀和寫的操作。 通過在連接上發(fā)送和接受字節(jié)流,兩個(gè)位于不同計(jì)算機(jī)的軟件程序能夠彼此相互通訊。為了發(fā)送一個(gè)消息到另一個(gè)程序,你需要知道對方機(jī)器的IP地址和socket端口號(hào)。在JAVA中,一個(gè)socket是由java.net.Socket類所表示的。

  為了創(chuàng)建一個(gè)套接字,你可以使用Socket類的構(gòu)造函數(shù)來完成。 這些構(gòu)造函數(shù)接受主機(jī)名和端口:

  public Socket(String host, int port)
  host表示遠(yuǎn)程計(jì)算機(jī)名或者IP地址,port表示該遠(yuǎn)程應(yīng)用的端口號(hào)。比如,要在80端口連接到y(tǒng)ahoo.com,你需要構(gòu)造下面的socket:

  new Socket("yahoo.com", 80);
  一旦你成功創(chuàng)建了一個(gè)Socket類的實(shí)例,就可以使用它來發(fā)送和接受字節(jié)流了。 要發(fā)送字節(jié)流,必須首先調(diào)用Socket類的getOutputStream 方法來獲得一個(gè)java.io.OutputStream對象。要發(fā)送一個(gè)文本到遠(yuǎn)程應(yīng)用程序,經(jīng)常要構(gòu)造一個(gè)從OutputStream對象返回的java.io.PrintWriter對象。要接收連接另一端的字節(jié)流,要調(diào)用Socket類的getInputStream方法,該方法是從 java.io.InputStream返回的。

  下面的程序段創(chuàng)建了一個(gè)socket,和本地HTTP服務(wù)器(127.0.0.1代表本地)進(jìn)行通訊,發(fā)送一個(gè)HTTP請求,然后從服務(wù)器接收一個(gè)響應(yīng)。它創(chuàng)建了一個(gè)StringBuffer 來保存響應(yīng),并將它打印到控制臺(tái)。

  Socket socket  = new Socket("127.0.0.1", "8080");
  OutputStream os = socket.getOutputStream();
  boolean autoflush = true;
  PrintWriter out = new PrintWriter( socket.getOutputStream(), autoflush );
  BufferedReader in = new BufferedReader(
  new InputStreamReader( socket.getInputStream() ));

  // send an HTTP request to the web server
  out.println("GET /index.jsp HTTP/1.1");
  out.println("Host: localhost:8080");
  out.println("Connection: Close");
  out.println();

  // read the response
  boolean loop  = true;
  StringBuffer sb = new StringBuffer(8096);

  while (loop) {
  if ( in.ready() ) {
    int i=0;
    while (i!=-1) {
      i = in.read();
      sb.append((char) i);
    }
    loop = false;
  }
  Thread.currentThread().sleep(50);
}

  // display the response to the out console
  System.out.println(sb.toString());
  socket.close();

  要從服務(wù)器得到一個(gè)確切的響應(yīng),你需要發(fā)送一個(gè)遵循HTTP協(xié)議規(guī)則的HTTP請求。如果你閱讀了上面的那段"超文本傳輸協(xié)議(HTTP)" ,那么你就應(yīng)該能夠理解剛才上面建立socket的代碼。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 会昌县| 武平县| 大城县| 七台河市| 宁陕县| 迁西县| 盈江县| 乐东| 岳阳市| 襄垣县| 专栏| 读书| 遵义县| 岑巩县| 叙永县| 凌源市| 鄄城县| 杭锦后旗| 华亭县| 江油市| 和田县| 顺义区| 循化| 旬阳县| 棋牌| 白水县| 原阳县| 珲春市| 云南省| 铅山县| 左权县| 六安市| 大姚县| 新竹市| 南靖县| 丰都县| 壤塘县| 沙湾县| 若尔盖县| 东安县| 靖宇县|