代码改变世界

黑马程序员-网络2

2014-06-06 18:26  黑马程序员*  阅读(229)  评论(0)    收藏  举报

服务端多线程的问题。

如何定义多线程?

只要明确客户端在服务端执行的代码即可,将代码放到run中。

       浏览器发送给服务器(我自己定义的day2404)的东西。

       http://192.168.0.145:8080/myweb/demo.html

       协议   主机名       端口号 资源路径  资源    

       GET / HTTP/1.1 (1.1和1.0版本):Get:Httpd请求消息头

       Accept: text/html, application/xhtml+xml,

       Accept-Language: zh-CN

       User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6

       .0; MALNJS)

       Accept-Encoding: gzip, deflate//新浪将数据压缩后,发送给tomcat,然后再解压缩

       Host: 192.168.0.145:10012//要访问的主机和端口

       DNT: 1

       Connection: Keep-Alive

自定义浏览器(TCP客户端),访问tomcat.

       浏览器发送一大堆东西(响应头消息和数据主体,三次握手)给服务端,服务端会返回给浏览器数据(应答消息头和数据主体),浏览器会解析客户端放松是数据(浏览器在应用层,会将消息头解析掉,只显示用户可以看的信息)。

       客户端浏览器发送消息头给服务器,服务器也要给浏览器发送消息。

       http://192.168.0.145:8080/myweb/demo.html

       协议   主机名       端口号 资源路径  资源    

       GET / HTTP/1.1 (1.1和1.0版本):Get:请求头

       Accept: text/html, application/xhtml+xml,

       Accept-Language: zh-CN

       User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6

       .0; MALNJS)

       Accept-Encoding: gzip, deflate//新浪将数据压缩后,发送给tomcat,然后再解压缩

       Host: 192.168.0.145:10012//要访问的主机和端口

       DNT: 1

       Connection: Keep-Alive

 URL 类 URL 代表一个统一资源定位符, 是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它

通俗将: Internet文件在网上的地址, 基本URL包含模式(或称协议)、服务器名称(或IP地址)。

该类有什么用:

1.不用再切割字符串来获取信息了。

2.openConnection()方法返回URLConnection对象,它封装了Socket,所以可以当做Socket使用。URLConnection内部封装了地址和目的,在内部封装了连接动作,就不用写Socket了,并且带了协议。在应用层。

URL u = new URL("http://www.baidu.com/");

              URLConnection uc = u.openConnection();

                     System.out.println(uc);.

              InputStream in = uc.getInputStream();

              byte[] buf = new byte[1024];

              int len=-1;

              while((len=in.read(buf))!=-1){

                     System.out.println(new String(buf,0,len));//没有响应头,在应用层被拆包解析了

              }

        * 封装了截取字符串的方法。

        *构造方法:

        *1.URL(String spec)

        *2.URL(String protocol, String host, int port, String file)

        *常用方法:

        *getFile()

        *getHost()

        *getPath()

        *getPort():没有指定端口,返回-1

        *getProtocol()

        *getQuery():getFile()后面的参数  用的频率很高 使用参数的形式想服务端发送数据。

        *URLConnection openConnection() 获取远程对象的连接。例如获取百度的连接

        *URLConnection内部封装了地址和目的,在内部封装了连接动作,就不用写Socket了,并且带了协议。在应用层。       *

        *getInputStream():有此方法,也说明了内部封装了Socket.在应用层,它会它响应头给解析了,值保留信息正文主体。       *

        *RUL有一个方法:openInputStream()

        *其实:就是openConnection.getInputStream();先连接

/*必须掌握   

URLConnection openConnection()//调用此方法,

        返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。

              每次调用此 URL 的协议处理程序的 openConnection 方法都打开一个新的连接。

抽象类URLConnection:它代表应用程序和 URL 之间的通信链接

方法: InputStream getInputStream()

        返回从此打开的连接读取的输入流。

OutputStream getOutputStream()//内部封装了Socket

        返回写入到此连接的输出流。

URL类中的方法: InputStream openStream() 封装了:openConnection().getInputStream(),

              但是没有URLConnection里面的方法灵活。因为它可以进行更对操作,解析头等。

        打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。

http:应用层。

       浏览器(客户端)给tomcat(服务端)发送请求(GET/myweb/demo.html http/1.1),请求访问demo.html,

       tomcat返回给浏览器(应答信息和demo.html),浏览器在传输层(所有数据都展示)收到数据,

       并向上传递给应用层(展示数据主体)。应用层的把HTTP协议识别的数据给拆包去掉了,

       把数据主体(dmeo.html)返回了。

抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。

       此类的实例可用于读取和写入此 URL 引用的资源。

       对影响到远程资源连接的参数进行操作。 与资源交互;查询头字段和内容。

小知识点:

       当定义的Socket()没有参数时,用connect连接上。

       Socket:connect(SocketAddress endpoint)  将此套接字连接到服务器。

       SocketAddress抽象类,其子类 InetSocketAddress,此类实现 IP 套接字地址(IP 地址 + 端口号)。

       主要用于:习惯于将地址和端口一起用时,方便。

       ServerSocket :ServerSocket(int port, int backlog)

                     backlog:就是允许链接的最大端口个数,比如一次只允许10个。

       域名解析:

       http://192.168.0.145:8080/myweb/demo.html?name=haha&age=30";

       http:www.sina.com.cn,那么这个是怎么访问的。sina与192.45.15.54是怎么对应的呢

       1.先找DNS服务器,获取ip地址,然后再用ip地址访问新浪,如果没有设置则默认运行商的dns服务器。windows\system32\drivers\hosts