[info]1. 软件结构[/info]

B/S结构:browser server 浏览器服务器模型如 贪玩蓝月,轩辕传奇,4399,等无需下载直接浏览器URL可以访问的程序。

C/S结构:client server 客户端服务器模型,撸啊撸,王者农,地下城qq等需要安装客户端的程序。

[info]2. 网络通讯协议[/info]

计算机与计算机直接连接的规则,把互联网分为五层每一层都有自己不同的规则

  1. 实体层:计算机啊与计算机用什么连起来,可以实光缆,电缆,双绞线,无线电波等方式。
  2. 链接层:单纯的0和1没有任何意义,必须规定解读方式:常见以太网协议(Ethernet)规定数据,MAC地址用来定位网卡和数据包的位置等。。。
  3. 网络层:IP  地址
  4. 传输层:TCP  UDP 这是应用之间不同功能设定的不同协议。
  5. 应用层:HTTP FTP TFTP SMTP SNMP DNS 等。。。

重点说明传输层:

  • UDP:UDP协议是一个面向无连接的协议。传输数据时,不需要建立连接,不管对方端服务是否启动,直接将数据、数据源和目的地都封装在数据包中,直接发送。每个数据包的大小限制在64k以内。它是不可靠协议,因为无连接,所以传输速度快,但是容易丢失数据。
  • TCP:传输控制协议 (Transmission Control Protocol)。TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。
  • 三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。

    第一次握手,客户端向服务器端发出连接请求,等待服务器确认。

    第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。

    第三次握手,客户端再次向服务器端发送确认信息,确认连接。整个交互过程如下图所示。

  • 特点:UDP简单速度快,容易丢包,TCP安全无差别传输。

[info]3.SocketServerSocket[/info]

Socket:该类是实现客户端套接字,套接字指两台设备之间的通讯端点。

//Socket(String host, int port)创建Socket套接字对象并指定端口和地址
//OutputStream getOutputStream() : 返回此套接字的输出流。
// InputStream getInputStream() : 返回此套接字的输入流。
// void shutdownOutput() : 禁用此套接字的输出流。

ServerSocket类:这个时服务器端的套接字,该对象等待网络请求

//ServerSocket(int port) :创建ServerSocket对象并指定端口号
// Socket accept() :接收并返回一个Socket对象,用于与客户端实现通信

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*服务器端*/
public class Service {
    public static void main(String[] args) throws IOException {

        //ServerSocket(int port) :创建ServerSocket对象并指定端口号
        ServerSocket ss = new ServerSocket(8888);
        // Socket accept() :接收并返回一个Socket对象,用于与客户端实现通信
        Socket socket = ss.accept();
        //InputStream getInputStream() : 返回此套接字的输入流。
        InputStream is = socket.getInputStream();


        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        System.out.println(new String(bytes, 0, len));

        OutputStream os = socket.getOutputStream();

        os.write("收到谢谢".getBytes());
        socket.close();
        ss.close();

    }
}
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/*客户端*/
public class Demo01 {
    public static void main(String[] args) throws IOException {

        // void shutdownOutput() : 禁用此套接字的输出流。
        // InputStream getInputStream() : 返回此套接字的输入流。
        //Socket(String host, int port)创建Socket套接字对象并指定端口和地址
        Socket socket = new Socket("127.0.0.1", 8888);
        //OutputStream getOutputStream() : 返回此套接字的输出流。
        OutputStream os = socket.getOutputStream();

        os.write("你好服务器".getBytes());
        InputStream is = socket.getInputStream();

        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        System.out.println(new String(bytes, 0, len));

        socket.close();

    }
}

打印输出结果:

收到谢谢

您必须 登录 才能发表评论