【JavaSE】网络编程(17)

引言

👉诸事静心即可, 毕竟不可能万事如意;
👉我早上起不来不是因为起不来,是因为喜欢回笼觉,淦;
👉距离开学还有39天,我还是没有底气去应对;
👉买基金涨了10%,果断卖了,不能贪心;

知识点总结

在这里插入图片描述

网络编程概念

网络编程就是通过程序使得互联网中的两台设备之间进行数据传输。

网络结构模式

C/S
Client/Server,指客户端对服务器;像我们平时用的QQ,Wechat,Alipay就是我们通过下载客户端来访问服务器,进行数据传输。
B/S
Browser/Server,指浏览器对服务器;像Chrome,Firefox,Safari就是通过浏览器访问服务器的。

网络编程三要素

  • 网络通信协议
  • IP地址
  • 端口号

网络通信协议

通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信。
TCP/IP协议
TCP/IP是互联网相关的各类协议族的总称,如TCP,UDP,IP,FTP,HTTP等都属于TCP/IP族内的协议。
在这里插入图片描述

TCP

传输控制协议 (Transmission Control Protocol)。TCP协议是面向连接的通信协议,即在传输之前要对传输设备之间进行连接;它的特点是可靠无差错;适用于对文件下载等传输。
三次握手
在TCP协议的准备阶段,客户端和服务端要经历三次握手,以确保连接成功。

  • 第一次握手:客户端向服务端发送连接请求,等待服务端回应;
  • 第二次握手:服务器端向客户端发送一个回应,告知连接成功;
  • 第三次握手:客户端再一次向服务器端发送确认消息,确认连接成功;
UDP

用户数据报协议(User Datagram Protocol)。UDP是一种无连接协议,它不知道发送的数据是否平安到达,所以可能会有丢失的情况;常用于视频会议,语言聊天等场景。

IP地址

把计算机比作电话的话,IP地址就是手机号;
IPV4
是一个32位的二进制数,通常被分为4个字节,如192.168.1.1;每八位用十进制来表示;每个字节的范围是0~255;

eg       192.      168.        1.        1
    11000000  10101000  00000001  00000001

IPV6
IPv6的地址长度为128位,是IPv4地址长度的4倍。采用十六进制表示。分成八组十六进制数;
127.0.0.1localhost表示的都是本地地址;

端口号

用两个字节表示的整数,它的取值范围是0~65535。客户机可以通过IP地址找到服务器端,但是服务器端有很多端口的;根据端口号才能准确的传输数据。
在这里插入图片描述
常用端口号
80 : 网络端口
3306:mysql数据库端口
8080:Tomcat服务器端口

TCP通信

通信两端分为客户端(Client)和服务端(Server);
通信步骤
1.服务端启动,等待客户端连接;
2.客户端主动连接服务端;
Java实现通信步骤
Java.net中的Socket类表示客户端;ServerSocket类表示服务端;

Socket类

该类实现客户端套接字(也称为“套接字”); 套接字是两台机器之间通讯的端点。
构造方法
1.Socket()
创建一个未连接的套接字,并使用系统默认类型的SocketImpl。
2.Socket(String address, int port)
创建流套接字并将其连接到指定服务器的指定IP地址和端口号。
常用方法
1.getInputStream()
返回此套接字的输入流。
2.getOutputStream()
返回此套接字的输出流。
3.close()
关闭此套接字。
使用步骤
1.创建一个Socket对象,构造方法中声明连接的服务器的IP地址和端口号;
2.使用getOutputStream()方法,获取网络字节输出流;
3.使用网络字节输出流向服务器端传输数据;
4.使用getInputStream()方法,获取网络字节输入流;
5.使用网络字节输入流获取服务器端传来的回应数据;
6.释放资源(Socket);

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

public class Demo01Client {
    public static void main(String[] args) throws IOException {
        Socket  sc=new Socket("127.0.0.1",1288);
        OutputStream os = sc.getOutputStream();
        os.write("你好,服务端".getBytes());
        InputStream inputStream = sc.getInputStream();
        byte[] bt=new byte[1024];
        int len=inputStream.read(bt);
        System.out.println(new String(bt,0,len));
      sc.close();
    }
}

ServerSocket

与Socket类十分相似;
构造方法
1.ServerSocket()
创建一个未连接的套接字,并使用系统默认类型的SocketImpl。
2.ServerSocket(int port)
创建流套接字并将其绑定到指定端口号。
常用方法
1.getInputStream()
返回此套接字的输入流。
2.getOutputStream()
返回此套接字的输出流。
**3.Socket accept()
侦听要连接到此套接字并接受它。
使用步骤
1.创建一个ServerSocket对象,构造方法中声明端口号;
2.用accept()方法创建一个Socket对象;
使用getIntputStream()方法,获取网络字节输入流;
3.使用网络字节输入流读取客户端传输的数据;
4.使用getOuputStream()方法,获取网络字节输出流;
5.使用网络字节输出流向服务器端传输回应数据;
6.释放资源(Socket,ServerSocket);


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

public class Demo01Serve {
    public static void main(String[] args) throws IOException {
        ServerSocket ss=new ServerSocket(1288);
        Socket accept = ss.accept();
        InputStream is = accept.getInputStream();
        byte[] bt=new byte[1024];
        int len=is.read(bt);
        System.out.println(new String(bt,0,len));
        OutputStream outputStream = accept.getOutputStream();
        outputStream.write("收到了".getBytes());
        accept.close();
        ss.close();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高冷小伙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值