黑马程序员-java基础网络编程(其它)-程序员宅基地

——- android培训java培训、期待与您交流! ———-


一、获得http请求信息

GET / HTTP/1.1
Host: 127.0.0.1:11000
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

解释:
GET / HTTP/1.1 : 请求方式/协议名称/协议版本
Host: 127.0.0.1:11000 : 主机IP地址:端口号
Connection: keep-alive : 客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
Accept : 可以接收的文件类型。
User-Agent : User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。
它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。
通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计;
Accept-Encoding : 接收文件编码。
Accept-Language : 接收语言

代码块

练习:获得http请求信息

package com.itheima4;

import java.io.InputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * ServerDemo对象
 * @author jjy
 * 
 */
public class ServerDemo{

    public static void main(String[] args)throws Exception{

        ServerSocket ss = new ServerSocket(11000);

        Socket s = ss.accept();

        String ip = s.getInetAddress().getHostAddress();

        System.out.println("ip地址为;"+ip);


        InputStream in = s.getInputStream();

        byte[] buf = new byte[1024];

        int len  = in.read(buf);
        /**
         * HTTP请求头:
            GET / HTTP/1.1
            Host: 127.0.0.1:11000
            Connection: keep-alive
            Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,;q=0.8
            User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
            Accept-Encoding: gzip,deflate,sdch
            Accept-Language: en-US,en;q=0.8
         */
        System.out.println(new String(buf,0,len));

        PrintWriter out = new PrintWriter(s.getOutputStream());

        out.println("客户端你好");

        //s.close();

        //ss.close();
    }
}

二、使用URL和URLConnection实现浏览器功能

URL
定义:类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用。
常用方法:

常用方法如下:
Socket(String host, int port) -> 创建一个流套接字并将其连接到指定主机上的指定端口号。
URL(String spec) -> 根据 String 表示形式创建 URL 对象。
getFile() -> 获取此 URL 的文件名。
getHost() -> 获取此 URL 的主机名(如果适用)。
getPath() -> 获取此 URL 的路径部分。
getPort() -> 获取此 URL 的端口号。
getProtocol() -> 获取此 URL 的协议名称。
getQuery() -> 获取此 URL 的查询部分。
openConnection() -> 返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。

URLConnection
定义:抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。
常用方法:

常用方法如下:
getInputStream() -> 返回从此打开的连接读取的输入流。
getOutputStream() -> 返回写入到此连接的输出流。

代码块

练习:使用URL和URLConnection实现浏览器功能

package com.itheima4;

import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;




/**
 * URLConnectionDemo对象
 * @author jjy
 * 
 * 应用层:传输层+响应头
 * 
 * 
 * SocketAddress:IP地址+端口号
 * 
 * 最大连接数:ServerSocket(int port,int backlog)
 */
public class URLConnectionDemo{

    public static void main(String[] args)throws Exception{

        URL url = new URL("http://127.0.0.1:8080/myweb/demo.html");

        URLConnection conn = url.openConnection();

        System.out.println(conn);

        InputStream in = conn.getInputStream();

        byte[] buf = new byte[1024];

        int len = in.read(buf);

        System.out.println(new String(buf,0,len));
    }
}

运行结果:
sun.net.www.protocol.http.HttpURLConnection:http://127.0.0.1:8080/myweb/demo.html


这是我的主页


欢迎光临

这是我的主页
这是我的主页
这是我的主页
这是我的主页
这是我的主页
这是我的主页


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_29669375/article/details/46839257

智能推荐

街头霸王5显示正在登陆服务器无法进入游戏,街头霸王5打不开怎么办 无法进入游戏解决方法..._黄草莓酱的博客-程序员宅基地

街头霸王5已在今天正式和玩家们见面了,有玩家遇到了无法进入游戏的情况,这又要怎么解决呢?下面,小编就带来了街头霸王5打不开解决方法,一起来看看吧。街头霸王5已在今天正式和玩家们见面了,有玩家遇到了无法进入游戏的情况,这又要怎么解决呢?下面,小编就带来了街头霸王5打不开解决方法,一起来看看吧。1、首先检查电脑配置是否满足要求。街头霸王5对于硬件的需求可不低,尤其是显卡的需求。中高档以上的显卡才能满足..._街头霸王5街机版无法启动

WebKit之Chromium的UI绘制流程初探-程序员宅基地

常见的UI库的绘制逻辑任何一个成熟的界面框架都有一个相当复杂的结构,消息循环的处理、控件的布局与绘制、焦点的管理以及资源的存取等等,Chromium里的界面框架也不例外,尤其采用的MVC设计方式更是增添了代码结构的复杂度。这里并不打算讨论Chromium的界面框架,本文感兴趣的只是Chromium的UI绘制部分,确切地说应该是引入Aura架构之后控件渲染的硬件加速支持。在常见的Di

xlua框架解析以及demo展示(二),主要是c#调用lua里的公共函数,以及lua调用c#和unity周期函数和组件_xlua self:setp()-程序员宅基地

(一)c#调用lua里的公共函数(1)调用lua中无参无返回值的全局函数第一种方式,用c#中的Action来映射lua中没有参数,没有返回值的全局函数:lua代码:print("Hello This is a lua file")--lua文件里建立的各种类型不同的变量num1=10str1="this is lua string "table1={ name="root", age=1, 13, f=function() print("th_xlua self:setp()

mybatis查询结果集封装_mybatis json字段封装成l结果集_WH_Deng的博客-程序员宅基地

文章目录mybatis查询结果集封装resultMap封装结果集mybatis查询结果集封装问题:当数据库中的列名与项目中实体的属性名不一致时,该如何转换(封装)?1.如果是驼峰模式,可以选择在全局设置settings中开启mapUnderscoreToCamelCase经典模式,默认false2.如果不是驼峰形式,可以为查询的列定义别名,让别名与实体的属性名一致3.如果实体属性中没有查询的列,可以直接定义返回值类型为map、java.util.Map、hashmap4.myba_mybatis json字段封装成l结果集

随便推点

Python实现数据可视化(饼状图,柱状图)_python遍历文本数据可视化柱形图-程序员宅基地

emmm…今天看到好友转发的消息p1,讲了一个掷骰子的游戏p2,然后算了一下发现期望是3.1左右,好像要比每次支付的2.99元要多?感觉这个用编程来解正好[旺柴]正好最近在看python就索性拿来当成一个练手的小项目[吃瓜]问题:计算期望思路:不想按照掷骰子的概率去算…所以直接用随机数生成器进行n次独立实验的模拟,然后把频率当成概率计算期望,当然关键还是数据可视化p3进行n次模拟,这..._python遍历文本数据可视化柱形图

ServletContext,session,servlet的线程安全问题-程序员宅基地

容器本身已经提供了多线程的支持,为我们省下了并发方面的编码,但是并发通常会带来线程安全的问题,我们来讨论一下安全的问题。先了解一个概念,属性:属性不同于parameter,它存在于request,session,context中,是以键值对儿的形式存在的,获取之后的值为object。context中的线程安全。其中的属性是非线程安全的,比如有两个servlet,A,B。A中有如下代码:getServletCont

nyoj_532_http://acm.nyist.net/JudgeOnline/problem.php?pid=532_http:/nyoj online-程序员宅基地

题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=532关于这种数学题,其实还是需要多加训练的。做的多了头脑就灵活了。额!其实这道题也不算太难啦!下面分享一下吧!主要就是sum函数中的那点代码,如果你看懂了。恭喜你,此题已成小菜!看不懂,没关系,自己找几个大点的测试数据,来调试一番,自己推理一下!Understand!#_http:/nyoj online

react 高阶组件_编写react 高阶组件_冰雪奇缘lb的博客-程序员宅基地

react 高阶组件概述目的:实现状态逻辑复用采用 包装(装饰)模式,比如说:手机壳手机:获取保护功能手机壳:提供保护功能高阶组件就相当于手机壳,通过包装组件,增强组件功能思路分析高阶组件 (HOC , Higher-Order Component )是一个函数,接收要包装的组件,返回增强后的组件高阶组件内部创建一个类组件,在这个类组件中提供复用的状态逻辑代码,通过prop将复用的状态传递给被包装组件 WrappedComponent使用步骤创建一个函数,名称约定以w_编写react 高阶组件

ios 高德地图 自定义气泡_高德地图全新升级推出“导航自定义”功能-程序员宅基地

鞭牛士报道 近日,高德地图更新版本,全新上线新功能“导航自定义”功能,用户可以自由组合导航的各个组件,让导航界面更契合个人需求和喜好,真正实现“我的导航我做主”。通常一个标准的导航界面大概会显示10多种元素,给用户提供全面的出行引导。而基于对专业司机用户的深度洞察,对人群精细化服务的渗透,以专业导航为基础,高德地图专门为用户推出了个性化定制导航信息展示的服务,以满足专业司机人群的个性化需求。用户可...

Android ANR 搜集-程序员宅基地

Android ANR排查应用层一般如下情况下需要查看log1) 程序异常退出 , uncaused exception2) 程序强制关闭 ,Force Closed (简称FC)3) 程序无响应 , Application No Response (简称ANR) , 顺便,一般主线程超过5秒么有处理就会ANRLog文件的组成1) 系统基本信息 ,包括 内存,CPU

推荐文章

热门文章

相关标签