学习心得

学习了网络编程,把很多知识融合到一起了,网络上传输信息需要客户端和服务器,最重要是要有服务器,发送信息给服务器,服务器接收分析之后再返给接收信息的客户端。通信要求需要IP地址和端口号。

                                                                                                      心情:和掌握情况成正比

                                                                             掌握情况:记的碎知识很多

 

网络编程(网络通信)

服务器:是一台电脑

客户端:电脑平板手机网页。。。

我们即将在自己的电脑上搭建服务器环境,我们自己的电脑还得是客户端。自己的电脑既是服务器又是客户端

Socket 编程

Socket 编程是建立在TCP/IP协议

如何在网络环境下访问其他主机?

通过IP地址+端口号形式可以访问其他的主机

通过指令控制台CMD:ipconfig 查看 ipv4地址,是当前局域网下的ip地址。

一台电脑可以有好多个端口号,每个端口号对应的程序也可以不同

import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;


public class Ch01 {
    @Test
    public void server() throws IOException {
        //创建一个服务器对象,绑定在8888端口
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务器已经启动。。。");
        Socket socket = serverSocket.accept();//服务器等待客户端连接
        InputStream inputStream = socket.getInputStream();//读取客户端发过来的信息
        byte [] buffer = new byte[1024*1024];
        int len;
        while((len = inputStream.read(buffer)) !=-1){
            System.out.println("服务器已接收客户端的数据:"+new String(buffer,0,len));//从0开始
        }
        //释放资源
        inputStream.close();
        socket.close();
    }
    @Test
//    connect连接
    public void client() throws IOException {
        //创建Socket通信客户端
        Socket socket = new Socket();
        //第一个参数是获取当前电脑的IP地址
        //第二个参数就是服务器的端口号
        socket.connect(new InetSocketAddress(InetAddress.getLoopbackAddress(),8888));
        //客户端发送数据给服务器
        OutputStream outputStream = socket.getOutputStream();
        String data = "发送的一句话说点啥,hello server!";
        System.out.println("客户端已发送信息:"+data);
        outputStream.close();
        socket.close();


    } }

C/S架构:Client/Server客户端/服务器,QQ,360,腾讯会议,游戏

B/S架构:Browser/Server浏览器/服务器

移动互联,手机端为主,C/S架构,

Java主要要做的就是架构中的Server端。

1.静态资源:所有用户访问后,得到的结果都是一样的。html

2.动态资源:每个用户访问后,得到的结果可能不一样。爱奇艺

web服务器。 接收用户的请求,处理请求,给出响应。

通过浏览器访问我们的ServerSocket服务器,我们通过浏览器给我们的ServerSocket服务器发起了请求 我要访问服务器!!!

通过IP地址 + 端口号

本机的IP地址:

1.cmd---ipconfig

2.127.0.0.1---本机(个人建议,任何情况都好使)

3.localhost---本机(前提条件:你的电脑要联网,激活一下网卡)


 

 

127.0.0.1:8080 我们通过浏览器访问我们的ServerSocket,得到了一堆信息,看不懂。

其实发送过来的信息,报文。浏览器传递过来的一些消息。

User-Agent:告诉服务器我是从什么样的客户端来的。

Host: 127.0.0.1:8080,主机地址,目标主机。

貌似浏览器也是通过Socket和我们的服务器建立了TCP连接

我们不妨把浏览器给我们的服务器发送的信息称之为“请求”, 而且这个请求格式满足了http的协议。

请求:客户端--->服务器

响应:服务器--->客户端

我需要给浏览器一个响应!!! 我们一般情况下,给浏览器做出响应,需要遵循浏览器的格式要求:

-------------响应的基本格式----------------

HTTP/1.1 200 OK

Content-Length: 39

Content-Type: text/html;charset=UTF-8

<h1>hello server</h1>

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//resonse   响应
public class Demo {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务器启动成功");
        Socket server = serverSocket.accept();
        OutputStream outputStream = server.getOutputStream();
        String response = "HTTP/1.1 200 OK\r\n"+
                "Content-Length: 39\r\n"+
                "Content-Type: text/heml;charset=UTF-8\r\n\r\n"+
                "<h1>hello server</h1>";
        outputStream.write(response.getBytes());
        outputStream.flush();


    }
}
 

 

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


public class Server01 {


    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8080);
        // 等待客户端的连接
        Socket accept = serverSocket.accept();
        // 获取一个输入流来读取客户端发送的数据
        InputStream inputStream = accept.getInputStream();
        byte [] buf = new byte[1024];
        int len;
        while((len = inputStream.read(buf)) != -1){
            System.out.println(new String(buf,0,len));
        }


        inputStream.close();
        accept.close();
    }
 

 

重定向

假如我要访问的是www.baidu.com,结果页面展示的是www.jd.com

重定向会重新定位到新的页面,而且地址栏的地址也会随之变化。

public class Server03 {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务器启动成功...");
        Socket server = serverSocket.accept();
        OutputStream outputStream = server.getOutputStream();
        // 按照http协议的格式封装一个报文数据
        String response = "HTTP/1.1 302 Moved Temporarily\r\n"+
                "Location: https://www.baidu.com\r\n\r\n";
        outputStream.write(response.getBytes());
        outputStream.flush();
        // 这个流不要着急关,因为突然的关闭会导致浏览器和服务器断开连接
    }
}
 

 

 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

面试题:TCP 三次握手:
(1). 第⼀次握手,客户端发送syn(SYN 同步序列编号)包到服务器端,客户端进入syn_send
状态,等待服务器端确认。
(2). 第⼆次握手,服务器端向客户端回送⼀个 SYN+ACK包 ACK (Acknowledge
character)即是确认字符,服务器端进入syn_recv状态
(3). 第三次握手,客户端再次向服务器端发送确认信息,确认连接 ACK 包,至此客户
端和服务器端进⼊established状态。
(4).握手过程中传送的包不包含任何数据,连接建立后才会开始传送数据,理想状态下,
TCP连接⼀旦建立,在通信双方的任何一方主动关闭连接前,TCP连接都会⼀直保持下
去。

 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

 

 

posted on 2022-08-11 20:23  骐琳  阅读(23)  评论(0编辑  收藏  举报

你点我就回上面去了ヾ(≧O≦)〃嗷~