ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022-08-11 第四组

2022-08-11 20:30:54  阅读:159  来源: 互联网

标签:11 java Socket 08 ServerSocket import 服务器 第四组 客户端


                                                        学习心得

学习了网络编程,把很多知识融合到一起了,网络上传输信息需要客户端和服务器,最重要是要有服务器,发送信息给服务器,服务器接收分析之后再返给接收信息的客户端。通信要求需要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连接都会⼀直保持下
去。

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

 

 

标签:11,java,Socket,08,ServerSocket,import,服务器,第四组,客户端
来源: https://www.cnblogs.com/wxp0909/p/16577760.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有