国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java代碼構(gòu)建簡(jiǎn)單http服務(wù)器和客戶端

這篇具有很好參考價(jià)值的文章主要介紹了java代碼構(gòu)建簡(jiǎn)單http服務(wù)器和客戶端。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

初識(shí)http
a、超文本傳輸 、應(yīng)用層的面向?qū)ο蟮膮f(xié)議,概念介紹網(wǎng)上資源一大堆,關(guān)鍵是基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)。
b、一開始接觸web項(xiàng)目,都是先接觸的servlet,tomcat服務(wù)器默認(rèn)實(shí)現(xiàn)的一套http規(guī)范,提供了基礎(chǔ)服務(wù)和組件環(huán)境,直接拿到請(qǐng)求、構(gòu)建正文、響應(yīng)客戶端

然而一個(gè)http請(qǐng)求包含:
第一行:請(qǐng)求方式(get、post、put、delete)+“空格”+URI+“空格”+http協(xié)議版本(0.9、1.0、1.1) eg:GET /hello.html HTTP/1.1
第二行:我們熟悉的請(qǐng)求頭Request Head(請(qǐng)求類型、語言、代理、字符集)

http響應(yīng):
第一行:http協(xié)議版本+“空格”+狀態(tài)碼+”空格“+描述 eg:HTTP/1.1 200 OK
第二行:Response Head(包含Content-Type等)
第三行:響應(yīng)正文(一般html)
形象化的了解以上結(jié)構(gòu),打開熟知的瀏覽器
java代碼構(gòu)建簡(jiǎn)單http服務(wù)器和客戶端

構(gòu)建http server
現(xiàn)在我們由java代碼運(yùn)用ServerSocket tcp協(xié)議模擬構(gòu)建一個(gè)http服務(wù):

public class HttpServer {
    
    public static final int DEFAULT_PORT =8080;//默認(rèn)8080端口

    public static void start(){
        ServerSocket serverSocket;
        try {
            serverSocket = new ServerSocket(DEFAULT_PORT);
            System.out.println("服務(wù)器端正在監(jiān)聽端口:"+serverSocket.getLocalPort());
            while(true){//死循環(huán)時(shí)刻監(jiān)聽客戶端鏈接
                final Socket socket = serverSocket.accept();
                System.out.println("建立了與客戶端一個(gè)新的tcp連接,客戶端地址為:"+socket.getInetAddress()
                +":"+socket.getPort());
                //開始服務(wù)
                service(socket);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void service(Socket socket) throws Exception {

        //讀取HTTP請(qǐng)求信息
        InputStream socketIn = socket.getInputStream();
        Thread.sleep(500);
        int size = socketIn.available();
        byte[] b = new byte[size];
        socketIn.read(b);
        String request = new String(b);
        System.out.println(request);

        //解析請(qǐng)求方式、uri、協(xié)議,獲取uri
        String typeUriHttp = request.substring(0,request.indexOf("\r\n"));
        String uri = typeUriHttp.split(" ")[1];
        //簡(jiǎn)化處理響應(yīng)頭content-Type
        String contentType;
        if(uri.indexOf("html")!=-1||uri.indexOf("htm")!=-1){
            contentType = "text/html";
        }else if(uri.indexOf("jpg")!=-1||uri.indexOf("jpeg")!=-1){
            contentType = "image/jpeg";
        }else if(uri.indexOf("gif")!=-1){
            contentType = "image/gif";
        }else contentType = "application/octet-stream";

        //創(chuàng)建HTTP響應(yīng)結(jié)果
        //創(chuàng)建響應(yīng)協(xié)議、狀態(tài)
        String httpStatus = "HTTP/1.1 200 OK\r\n";
        //創(chuàng)建響應(yīng)頭
        String responseHeader = "Content-Type:" + contentType + "\r\n\r\n";
        InputStream in = HttpServer.class.getResourceAsStream("/webRoot"+uri);
        OutputStream socketOut = socket.getOutputStream();
        //發(fā)送響應(yīng)協(xié)議、狀態(tài)碼及響應(yīng)頭、正文
        socketOut.write(httpStatus.getBytes());
        socketOut.write(responseHeader.getBytes());
        int len =0;
        b = new byte[1024];
        while((len=in.read(b))!=-1){
            socketOut.write(b,0,len);
        }
        Thread.sleep(1000);
        //socket.close();
    }
}

?寫一個(gè)測(cè)試類,主方法啟動(dòng)服務(wù)

package Http;

/**
 * Author:varCode
 * Date:2019-03-22 20:55
 * Description:<描述>
 */
public class HttpTest {
    public static void main(String[] args) {
        //開啟Http服務(wù)端
         HttpServer.start();
    }
}

在我們項(xiàng)目目錄的webRoot文件夾下放入可訪問的資源,通過瀏覽器URI(資源定位符)讀取服務(wù)端資源,打開我們的瀏覽器,本地ip+默認(rèn)端口

java代碼構(gòu)建簡(jiǎn)單http服務(wù)器和客戶端

脫離tomcat服務(wù)環(huán)境的一個(gè)web訪問頁面,是有點(diǎn)小意思啊,下面我們?cè)賮砻撾x客戶端瀏覽器

構(gòu)建http client

package Http;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * Author:varCode
 * Date:2019-03-22 22:20
 * Description:<描述>
 */
public class HttpClient {

    //實(shí)現(xiàn)get方式訪問http server
    public static void doGet(String host,int port,String uri){
        Socket socket = null;
        try {
            socket = new Socket(host,port);
            //創(chuàng)建http請(qǐng)求  第一行 注意空格
            StringBuffer sb = new StringBuffer("GET "+uri+" HTTP/1.1\r\n");
            //構(gòu)建請(qǐng)求頭
            sb.append("Accept: */*\r\n");
            sb.append("Accept-Language: zh-cn\r\n");
            sb.append("Accept-Encoding: gzip, deflate\r\n");
            sb.append("User-Agent: HTTPClient\r\n");
            sb.append("Host: localhost:8080\r\n");
            sb.append("Connection: Keep-Alive\r\n");
            //發(fā)送http請(qǐng)求
            OutputStream socketOut = socket.getOutputStream();
            socketOut.write(sb.toString().getBytes());
            Thread.sleep(2000);
            InputStream socketIn = socket.getInputStream();
            int size = socketIn.available();
            byte[] b = new byte[size];
            socketIn.read(b);
            //將相應(yīng)結(jié)果輸出到控制臺(tái) 模擬瀏覽器界面
            System.out.println(new String(b));
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        finally {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

?再來一個(gè)客戶端測(cè)試類:要先啟動(dòng)上述的HttpTest服務(wù)測(cè)試類,再運(yùn)行下面客戶端主程序測(cè)試:

package Http;

/**
 * Author:varCode
 * Date:2019-03-22 22:41
 * Description:<描述>
 */
public class ClientTest {
    public static void main(String[] args) {
        //客戶端發(fā)請(qǐng)求
        HttpClient.doGet("localhost",8080,"/weather.html");
    }
}

且將控制臺(tái)當(dāng)作頁面打印如下:

java代碼構(gòu)建簡(jiǎn)單http服務(wù)器和客戶端

好了,至此完全可以由HttpClient客戶端類——>HttpServer服務(wù)類上請(qǐng)求及響應(yīng),可以由瀏覽器——>HttpServer發(fā)送請(qǐng)求(上面已經(jīng)測(cè)試了),HttpClient——>tomcat來相應(yīng)請(qǐng)求(有興趣的可以自己來,tcp協(xié)議只能監(jiān)聽一個(gè)端口的主機(jī)服務(wù),開啟tomcat,關(guān)閉HttpServer測(cè)試類)
瀏覽器和tomcat都是實(shí)現(xiàn)了http規(guī)范,都能解析請(qǐng)求和構(gòu)建響應(yīng),更何況tomcat還是java編寫的服務(wù)器?文章來源地址http://www.zghlxwxcb.cn/news/detail-496085.html

到了這里,關(guān)于java代碼構(gòu)建簡(jiǎn)單http服務(wù)器和客戶端的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java【網(wǎng)絡(luò)編程2】使用 TCP 的 Socket API 實(shí)現(xiàn)客戶端服務(wù)器通信(保姆級(jí)教學(xué), 附代碼)

    Java【網(wǎng)絡(luò)編程2】使用 TCP 的 Socket API 實(shí)現(xiàn)客戶端服務(wù)器通信(保姆級(jí)教學(xué), 附代碼)

    ??各位讀者好, 我是小陳, 這是我的個(gè)人主頁 ??小陳還在持續(xù)努力學(xué)習(xí)編程, 努力通過博客輸出所學(xué)知識(shí) ??如果本篇對(duì)你有幫助, 煩請(qǐng)點(diǎn)贊關(guān)注支持一波, 感激不盡 ?? 希望我的專欄能夠幫助到你: JavaSE基礎(chǔ): 基礎(chǔ)語法, 類和對(duì)象, 封裝繼承多態(tài), 接口, 綜合小練習(xí)圖書管理系統(tǒng)

    2024年02月05日
    瀏覽(33)
  • Nginx HTTP/3服務(wù)器-客戶端環(huán)境搭建

    一、 NGINX 服務(wù)器介紹: NGINX是一個(gè)高性能的開源Web服務(wù)器,也可用作反向代理服務(wù)器、負(fù)載均衡器和HTTP緩存。它由俄羅斯的程序員Igor Sysoev創(chuàng)建,并于2004年首次公開發(fā)布。NGINX的設(shè)計(jì)重點(diǎn)是高性能、高并發(fā)和低內(nèi)存消耗,使其成為了現(xiàn)代Web架構(gòu)中的關(guān)鍵組件之一。 NGINX的一些

    2024年03月11日
    瀏覽(28)
  • HTTP介紹 原理 消息結(jié)構(gòu) 客戶端請(qǐng)求 服務(wù)器響應(yīng) HTTP狀態(tài)碼

    HTTP介紹 原理 消息結(jié)構(gòu) 客戶端請(qǐng)求 服務(wù)器響應(yīng) HTTP狀態(tài)碼

    HTTP協(xié)議 是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于萬維網(wǎng)(www.world wide web)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議 HTTP 是基于TCP/IP(三次握手,四次揮手)通信協(xié)議來傳輸數(shù)據(jù)(HTML文件,圖片文件,查詢結(jié)果等) TCP:可靠的,丟包重傳 UTP:不可靠的,直播,

    2024年02月05日
    瀏覽(28)
  • 使用Netty構(gòu)建TCP和UDP服務(wù)器和客戶端

    Netty是一個(gè)基于Java NIO實(shí)現(xiàn)的網(wǎng)絡(luò)通信框架,提供了高性能、低延遲的網(wǎng)絡(luò)通信能力。使用Netty構(gòu)建TCP和UDP服務(wù)器和客戶端非常簡(jiǎn)單,下面是一個(gè)簡(jiǎn)單的示例代碼: 構(gòu)建TCP服務(wù)器 構(gòu)建TCP客戶端 構(gòu)建UDP服務(wù)器 構(gòu)建UDP客戶端 ? 上述示例代碼中,分別定義了一個(gè)TCP服務(wù)器、TCP客戶

    2024年02月16日
    瀏覽(23)
  • Python網(wǎng)絡(luò)編程實(shí)戰(zhàn):構(gòu)建TCP服務(wù)器與客戶端

    Python網(wǎng)絡(luò)編程實(shí)戰(zhàn):構(gòu)建TCP服務(wù)器與客戶端 在信息化時(shí)代,網(wǎng)絡(luò)編程是軟件開發(fā)中不可或缺的一部分。Python作為一種功能強(qiáng)大的編程語言,提供了豐富的網(wǎng)絡(luò)編程庫和工具,使得開發(fā)者能夠輕松構(gòu)建各種網(wǎng)絡(luò)應(yīng)用。本文將詳細(xì)介紹如何在Python中進(jìn)行網(wǎng)絡(luò)編程,特別是如何使用

    2024年04月15日
    瀏覽(26)
  • 使用Go語言的HTTP客戶端和服務(wù)器

    使用Go語言的HTTP客戶端和服務(wù)器

    使用Go語言進(jìn)行HTTP客戶端和服務(wù)器開發(fā)是一種高效且強(qiáng)大的方式。Go語言的標(biāo)準(zhǔn)庫提供了對(duì)HTTP協(xié)議的全面支持,使得創(chuàng)建HTTP客戶端和服務(wù)器變得簡(jiǎn)單。 首先,讓我們來看一下如何創(chuàng)建一個(gè)簡(jiǎn)單的HTTP服務(wù)器。在Go中,可以使用 net/http 包來創(chuàng)建HTTP服務(wù)器。以下是一個(gè)簡(jiǎn)單的示例

    2024年01月16日
    瀏覽(47)
  • Netty示例教程:結(jié)合Spring Boot構(gòu)建客戶端/服務(wù)器通信

    當(dāng)涉及到在客戶端/服務(wù)器應(yīng)用程序中使用Netty進(jìn)行通信時(shí),以下是一個(gè)結(jié)合Spring Boot的示例教程,演示如何使用Netty構(gòu)建客戶端和服務(wù)器應(yīng)用程序。 簡(jiǎn)介 本教程將指導(dǎo)您如何使用Netty結(jié)合Spring Boot構(gòu)建客戶端和服務(wù)器應(yīng)用程序。通過Netty的可靠網(wǎng)絡(luò)通信功能,您可以輕松構(gòu)建高

    2024年02月15日
    瀏覽(96)
  • netty構(gòu)建udp服務(wù)器以及發(fā)送報(bào)文到客戶端客戶端詳細(xì)案例

    netty構(gòu)建udp服務(wù)器以及發(fā)送報(bào)文到客戶端客戶端詳細(xì)案例

    目錄 一、基于netty創(chuàng)建udp服務(wù)端以及對(duì)應(yīng)通道設(shè)置關(guān)鍵 二、發(fā)送數(shù)據(jù) 三、netty中的ChannelOption常用參數(shù)說明 1、ChannelOption.SO_BACKLOG 2、ChannelOption.SO_REUSEADDR 3、ChannelOption.SO_KEEPALIVE 4、ChannelOption.SO_SNDBUF和ChannelOption.SO_RCVBUF 5、ChannelOption.SO_LINGER 6、ChannelOption.TCP_NODELAY 以上代碼中

    2024年04月09日
    瀏覽(30)
  • QT實(shí)現(xiàn)客戶端服務(wù)器HTTP(get請(qǐng)求、post請(qǐng)求)

    QT實(shí)現(xiàn)客戶端服務(wù)器HTTP(get請(qǐng)求、post請(qǐng)求)

    服務(wù)器代碼如下: QtHttpForS.h QtHttpForS.cpp main.cpp QtHttpForS.ui 客戶端代碼: QtHttpForC.h QtHttpForC.cpp mian.cpp QtHttpForC.ui 程序運(yùn)行效果: GET請(qǐng)求: POST請(qǐng)求: POST請(qǐng)求使用postman測(cè)試: 注意: 可以發(fā)現(xiàn),在使用postman進(jìn)行POST請(qǐng)求發(fā)送時(shí),服務(wù)器接收到的請(qǐng)求頭與QTSocket的POST請(qǐng)求的請(qǐng)求頭

    2023年04月22日
    瀏覽(23)
  • 基于Spring Boot2.0 & HTTP/2 實(shí)現(xiàn)服務(wù)器、客戶端

    基于Spring Boot2.0 & HTTP/2 實(shí)現(xiàn)服務(wù)器、客戶端

    HTTP協(xié)議由于其無狀態(tài)的特性以及超高的普及率,是當(dāng)下大部分網(wǎng)站選擇使用的應(yīng)用層協(xié)議。然而,HTTP/1.x的底層傳輸方式的幾個(gè)特性,已經(jīng)對(duì)應(yīng)用的整體性能產(chǎn)生了負(fù)面影響。特別是,HTTP/1.0在每次的TCP連接上只允許發(fā)送一次請(qǐng)求,在HTTP/1.1中增加了請(qǐng)求管線,但是這僅僅解決

    2023年04月09日
    瀏覽(83)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包