Java基础知识网络编程(浏览器&服务端)

TCP协议传输数据时有客户端和服务端,客户端和服务端无非就是基于网络应用的程序而已,生活中,浏览器就是一个标准的客户端。
1演示服务端和浏览器:
服务端:
服务端即自己的主机,写一个服务端的小代码:

import java.io.*;
import java.net.*;

class ServerDemo 
{
    public static void main(String[] args) throws Exception
    {
        ServerSocket ss=new ServerSocket(10010);
        Socket s=ss.accept();
        System.out.println(s.getInetAddress().getHostAddress());
        PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
        pw.println("客户端你好");
        s.close();
        ss.close();
    }
}

打开服务器,输入网址:http://你的IP地址:设置的端口号 ,便可以连接到自己的主机,并收到“客户端你好”。
也可以在dos命令行里输入:telnet IP:端口
telnet命令是windows提供的远程登陆的工具,可以访问网络上任意一台主机,在dos命令行里连接,连接成功后,可以对主机进行配置。

2 客户端是浏览器,服务端是Tomcat服务器
其实Tomcat服务器就是一个服务器软件,是一个纯Java编写的软件,里面封装了 ServerSocket。
bin 目录下双击startup启动服务器,端口是8080。
webapps目录下新建文件夹,用于存放自己的服务.

3 客户端是浏览器,服务端是自己写的服务
浏览器在访问本地服务器时发过来:
这里写图片描述

这是浏览器发过来的http请求消息头。浏览器和服务器是不同厂商制作的,如果浏览器想和不同厂商的服务器进行数据的交互,必须都遵守一些国际标准规则,传输层规则则是TCP/IP,而应用层这里是HTTP协议,

http://192.168.1.6:10000/myweb/demo.html
GET:GET请求方式
myweb/demo.html :表示浏览器想要访问这台主机的10000端口的myweb路径下的demo.html这个资源。
HTTP/1.1:指的是协议版本为HTTP 1.1版本
Accept:。。。。。:表示浏览器可以支持的文件类型。
Accept-Language:表示浏览器的语言
Accept-Encoding:gzip,deflate:表示支持的数据压缩的方式。
User-Agent:用户的信息
Host:服务器的哪台主机
Connection:Keep-alive 保持连接。
在下面是请求的数据体

模拟浏览器想Tomcat发送请求:

import java.io.*;
import java.net.*;
class MyIe 
{
    public static void main(String[] args) throws Exception
    {
        Socket s=new Socket("192.168.1.6",8080);
        PrintWriter pw=new PrintWriter(s.getOutputStream(),true);

        pw.println("GET /myweb/demo.html  HTTP/1.1");
        pw.println("Accept:*/*");
        pw.println("Accept-Language:zh-cn");
        pw.println("Host:192.168.1.6:10000");
        pw.println("Connection:closed");
        pw.println();
        pw.println();

        BufferedReader bufr=new BufferedReader(new InputStreamReader(s.getInputStream()));
        String line=null;
        while((line=bufr.readLine())!=null)
        {
            System.out.println(line);
        }
        s.close();
    }
}

这里写图片描述
Tomcat的WebApps目录下新建自己的项目myweb,并写一个demo.html

这里写图片描述

Tomcat服务器响应请求之后,也会往浏览器发送HTTP应答消息头。
如图中所示,
HTTP/1.1指的是协议版本,200是响应状态码表示请求成功
等等

URL类和URLConnection类

URL类:代表一个统一资源定位符。URL可以分成几个部分:指定使用的协议(如http),信息所在的主机(如www.baidu.com),端口(用于建立到远程主机TCP连接的端口号,如果为未指定端口号,使用协议默认端口,如HTTP默认为80),信息资源。
例:http://192.168.1.6:8080/myweb/demo.html

构造方法摘要
URL(String spec)
根据 String 表示形式创建 URL 对象。
URL(String protocol, String host, int port, String file)
根据指定 protocol、host、port 号和 file 创建 URL 对象。
URL(String protocol, String host, int port, String file, URLStreamHandler handler)
根据指定的 protocol、host、port 号、file 和 handler 创建 URL 对象。
URL(String protocol, String host, String file)
根据指定的 protocol 名称、host 名称和 file 名称创建 URL。
主要方法:
String getFile()
获取此 URL 的文件名。
String getHost()
获取此 URL 的主机名(如果适用)。
String getPath()
获取此 URL 的路径部分。
int getPort()
获取此 URL 的端口号。
String getProtocol()
获取此 URL 的协议名称。
String getQuery()
获取此 URL 的查询部分。
URLConnection openConnection()
返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。

URLConnection类:
抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。
直接已知子类:
HttpURLConnection, JarURLConnection

URLConnection类是将Socket封装到了内部,并将一些HTTP请求消息头和HTTP响应消息头的写入和解析方法也封装在类中,也就是说将传输层的操作转移到了应用层。所以读到的数据都是经过拆包之后的。

URL类的openConnection()方法返回一个URLConnection的子类HTTPURLConnection的子类对象。创建对象表示已经与远程主机建立连接。

OutputStream getOutputStream()
返回写入到此连接的输出流。
InputStream getInputStream()
返回从此打开的连接读取的输入流。

例:

import java.io.*;
import java.net.*;

class URLConnectionDemo 
{
    public static void main(String[] args) throws Exception
    {
        String urlpath="http://192.168.1.6:8080/myweb/demo.html";
        URL url=new URL(urlpath);
        URLConnection conn=url.openConnection();

        BufferedReader bufr = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line=null;
        while((line=bufr.readLine())!=null)
        {
            System.out.println(line);
        }

    }
}

这里写图片描述

网络小知识点
DNS:(Domain Name Server)域名解析服务器。 用于解析网站名和IP地址的映射关系。
当我们在浏览器中输入网址点击连接之后,都做了什么事情呢?
浏览器读到输入的网址之后,解析出使用的协议,启动协议并查找主机和端口。
想要将主机名翻译成IP地址,需要进行域名解析,这时就需要DNS。 所以浏览器会在公网上找DNS,DNS里记录着知名网站的主机名和IP地址的映射关系,查找到主机名对应的IP之后,返回给浏览器,浏览器根据IP和端口号连接到主机上。
如果不配置DNS那么自动走运营商的DNS如电信或者联通,如果配置DNS那么走指定DNS。
另外一种情况,如果不走公网,访问的是http://127.0.0.1:8080 或者http://localhost:8080
其实,127.0.0.1和localhost的映射关系据在本机上,在“c:\windows\systems\drivers\ext\host”
这里写图片描述

浏览器通常是先在本地的host文件中查找主机名和IP的映射关系,如果没有再去公网上的DNS上找。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值