【Java学习笔记】Socket

Tomcat

(1)概念

Tomcat用于对外提供web服务的服务器;

(2)目录结构

结构及用途

文件夹说明
bin启动和关闭tomcat的批量配置文件
conf存放tomcat的配置文件
server.xml:用于配置server的相关信息,比如tomcat动端口,配置host,配置Context即Web应用。
web.xml:用于配置与Web应用(Web应用相当于一个Web站点)。
tomcat-user.xml:用于用户配置tomcat的用户密码和权限。
lib存放jar包
logs存放日志文件(对调试程序非常有用)
webapps用于放置web站点(发布web)
work存放JSP被访问后对应的server文件和class文件

这里写图片描述

(3)配置

  • 用于配置默认的首页
<!--     WEB-INF 的web.xml文件中-->
<welcome-file-list>
    <welcome-file>GET.html</welcome-file>
</welcome-file-list>
<welcome-file-list>
    <welcome-file>MainFrame</welcome-file>
 </welcome-file-list>       //不需要加“/”
  • 管理虚拟目录
<!—confserver.xml 文件中进行配置-->
<Context path="/web2" docBase="f:\\web2"/>

注:需要重启tomcat才能生效。且会覆盖之前默认的路径。

  • 自定义主机名
    注:DNS访问原理:
    1)先在C:\Windows\System32\drivers\etc中查找hosts中的IP地址,如果找不到,则进行网络适配器中DNS地址中继续寻找ip地址。若在找不到则报错。
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" />
  • 设置默认主机
    在server.xml中将engine中的defaultHost=”localhost”进行更改。
    <Engine name="Catalina" defaultHost="localhost">

(4)tomcat server 框架

这里写图片描述

Socket

概念

物理层:传输比特流———–传输比特数据
数据链路层(交换机):—–帧数据(MAC地址(网卡地址,全球唯一))
网络层(路由器):————–数据包
传输层:———-传输协议,端口号(段数据)(TCP/IP)/Socket(对TCP协议的封装)
会话层:——–建立数据传输的通道
表示层:——–对接收数据进行解析和加密
应用层:——— Http

网络通讯要素

1.IP(网络地址):(127.0.0.1,用于访问本地地址)
2.端口号:用于标示进程应用的传输地址(0~65535,其中0~1024为系统应用保留端口)
3.传输协议:UDP,TCP

传输协议

UDP:用户数据报协议,将数据及源和目的封装成数据包(不需要建立连接,每个数据<64K,速度快,不可靠)
TCP:传输控制协议,建立连接,网络必须走IP地址。

InetAddress

互联网协议地址对象,没有构造函数,故只能通过静态方法获取InetAddress实例。
常用方法:
ip = InetAddress.getLocalHost(); //获取本地Ip地址对象
ip.getHostAddress(); //获取本机IP地址
ip.getHostName(); //获取本机名字

UDP协议

使用UPD协议,数据传输的两端称为 “接收端”和“发送端”。
  • 接收端
@Test
  public void UDPRecvice() throws IOException {

    System.out.println("UDP Receive running");
    //创建UDP Socket,并监听8888端口
    DatagramSocket socket = new DatagramSocket(8888);
    byte[] a = new byte[1024];
    DatagramPacket packet = new DatagramPacket(a, a.length);

    //接收数据
    socket.receive(packet);
    String ip = packet.getAddress().getHostAddress();
    Integer port = packet.getPort();
    String data = new String(packet.getData(), 0, packet.getLength());
    System.out.println("ip=" + ip + ":" + port);
    System.out.println("receive:" + data);

  }
  • 发送端
/**
   * UDP 发送端
   */
  @Test
  public void UDPSend() throws IOException {

    System.out.println("UDP Send running");

    //创建UDP Socket服务
    DatagramSocket datagramSocket =
        new DatagramSocket(10000);

    byte[] a = "Hello World!".getBytes();
    //创建数据包,并设置发送的端口8888
    DatagramPacket datagramPacket =
        new DatagramPacket(a, a.length, InetAddress.getByName("localhost"), 8888);

    //发送数据
    datagramSocket.send(datagramPacket);
    //关闭Socket
    datagramSocket.close();

    System.out.println("UDP Send Over");

  }

TCP协议

使用TCP协议,数据传输的两端称为“客户端”和“服务端”。
  • 服务端
 /**
   * TCP 服务端
   */
  @Test
  public void TCPServer() throws IOException {

    System.out.println("TCP Server running");
    //创建Socket服务
    ServerSocket serverSocket = new ServerSocket(8888);
    //通过ServerSocket获取Socket,监听8888端口
    Socket socket = serverSocket.accept();
    //从客户端获取数据(获取InputStream)
    BufferedReader bufferedReader =
        new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String string = null;
    while ((string = bufferedReader.readLine()) != null) {
      //输出客户端传来的数据
      System.out.println(string);
      //同时返回数据(全部大写)
    }
    bufferedReader.close();

  }
  • 客户端
public static void main(String[] a) throws IOException {

    //监听本机 8888端口
    Socket socket = new Socket(InetAddress.getByName("localhost"), 8888);

    BufferedReader bufferedReader =
        new BufferedReader(new InputStreamReader(System.in));
    PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);

    String string = null;
    while ((string = bufferedReader.readLine()) != null) {
      printWriter.println(string);
    }
    socket.close();

  }

UDP和TCP的区别

TCPUDP
是否连接面向连接
传输可靠性可靠的
应用场合传输大量的数据
速度

HTTP

概念

HTTP,超文本链接,是客户端和服务端之间请求和响应的一种标准。

结构

  1. http请求
    请求行
    应答消息头
    应答体
  2. http响应
    状态行
    location:http://www.baidu.com //定位到哪里
    消息头
    Refered: 1;url=http://www.sina.com //1s后自动跳转到指定的地址。
    response.setHeader(“refresh”, “3;http://www.baidu.com“);
    Content-Disposition: attachment;filename=a.jpg //文件下载
    Set-Cookie:
    Express:-1 //告诉浏览器如何进行缓存

    • 文件下载
public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        //PrintWriter out = response.getWriter();
        //进行下载操作
        response.setHeader("Content-Disposition", "attachment;filename=a.jpg");
        String path = this.getServletContext().getRealPath("/image/a.jpg");
        System.out.println("path="+path);
        FileInputStream fileInpoutStream = new FileInputStream(path);
        byte [] by = new byte[1024];
        int len = 0;
        OutputStream outputStream = response.getOutputStream();
        while(  (len = fileInpoutStream.read(by)) != -1)
        {
            outputStream.write(by, 0, len);
        }
        fileInpoutStream.close();
        outputStream.close();

    }

URL

概念

统一资源定位符,可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。

URL


  • URL

类URL代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
URL url = new URL("http://172.21.66.210:8080/myWeb/baidu.htm");
InputStream myInputStream = url.openStream();


  • URLConnection

抽象类URLConnection是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。
URLConnection connection = url.openConnection();
InputStream myInputStream = connection.getInputStream();

注:打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。此方法是下面方法的缩写: openConnection().getInputStream()

URI

URI:统一资源标识符,表示请求服务器的路径。

URL和URI

URI属于父类,而URL属于URI的子类,URL是URI的子集。

URL格式:
1.协议(服务方式);
2.存有资源的主机IP地址(有时包括端口号);
3.主机资源的具体地址,如目录和文件名等。

URI格式:
1.访问资源的命名机制;
2.存放资源的主机名;
3.资源自身的名称,由路径表示,着重强调资源。

TCP/IP、HTTP、Socket的区别

(1)TCP/IP:是传输层协议,主要解决数据如何在网络中传输。
(2)HTTP:是应用层协议,主要解决如何包装数据
(3)Socket:是对TCP/IP协议的封装和应用(程序员层面上)

注:Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象

简述一次网络请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值