JAVASEday16 网络编程

认识网络

  • 计算机网络:是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

  • 网络模型

    • OSI分层(7层):物理成,数据链路层,网络层,传输层,会话层,表示层,应用层
    • TCP/IP分组:网络接口层,网际层,运输层,应用层
    • 五层协议:物理层,数据链路层,传输层,网络层,应用层
  • 各层的功能

    • 物理层:通过媒介传输比特流
    • 数据链路层:将比特流封装成帧和点对点的传输
    • 网络层:数据包的传输和网际互连
    • 传输层:提供端到端的可靠报文传输和差错控制
    • 会话层,建立,管理和终止会话
    • 表示层:对数据进行翻译,加密和压缩
    • 应用层:允许访问OSI环境的手段
  • 各层上使用的协议

    • 物理层:RJ45,CLOCK
    • 数据链路层:PPP,FR,VLAN,MAC
    • 网络层:IP,ICMP,IBMP,ARP,RARP,OSPF
    • 传输层:TCP,UDP
    • 会话层:NFS,SQL
    • 表示层:JPEG
    • 应用层:FTP,DNS,SMTP,HTTP,WWW.NFS

网络编程三要素

  • IP
    所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址,
    IP地址=网络号+主机号
    A类IP地址:第一段号码为网络地址,剩下的三段号码为本地计算机的号码
    B类IP地址:前二段号码为网络地址,剩下的二段号码为本地计算机的号码
    C类IP地址:前三段号码为网络地址,剩下的一段号码为本地计算机的号码
    特殊地址
    127.0.0.1 回环地址,可用于测试本机的网络是否有问题. ping 127.0.0.1
    DOS命令 ipconfig:查看本机IP地址
    xxx.xxx.xxx.255 广播地址

  • 端口
    物理端口 网卡口
    逻辑端口 我们指的就是逻辑端口
    a:每个网络程序都会有一个逻辑端口
    b:用于标识进程的逻辑地址,不同进程的标识
    c:有效端口:065535(两个字节),其中01023系统使用或保留端口。

  • 协议
    TCP:特点

    • 面向链接,可靠的数据传输

    • 传输单位是TCP报文段,传输没有大小限制

    • TCP传输速度慢,更注重数据的安全性
      UDP:特点:

    • 面向非链接,不可靠的传输

    • 传输单位是用户数据报,传输有大小限制

    • UDP传输速度快,因为不需要链接等待,少了许多操作

InetAddress类

为了方便我们对IP地址的获取和操作,java提供了一个类InetAddress 供我们使用
​ 此类表示互联网协议 (IP) 地址。
InetAddress类的常见功能
public static InetAddress getByName(String host)
​ public String getHostAddress()//获取IP
​ public String getHostName()//获取主机名
​ getLocalHost();返回本地主机

UDP

UDP发送数据步骤:

  • a: 创建UDP通讯客户端对象(DatagramSocket)
  • b: 创建数据报包 public DatagramPacket(byte[] buf, int length, InetAddress address,int port)
  • c: 发送 数据
  • d: 释放资源
public class UDPClient {
    public static void main(String[] args) throws IOException {
        //创建客户端对象
        DatagramSocket datagramSocket = new DatagramSocket();

        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("客户端向服务器发送的数据:");
            String s = scanner.nextLine();
            //要发送的内容存入字节数组
            byte[] bytes = s.getBytes();
            //要发送给多少端口号的主机
            InetAddress localHost = Inet4Address.getLocalHost();
            //定义一个数据包
            DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length,localHost,7777);
            //发送数据
            datagramSocket.send(datagramPacket);
            if ("886".equals(s))
                break;
        }
        //关闭资源
        datagramSocket.close();



    }
}

UDP接收数据步骤:

  • a: 创建UDP通讯协议服务器端对象(DatagramSocket) 注意要用有参数构造 指定端口号
  • b: 创建数据报包,作用用来接收数据 // public DatagramPacket(byte[] buf, int length)
  • c: 接收数据 receive(dp) ;
  • d: 解析数据报包,拿出数据 dp.getData() ; dp.getLength() ;
  • e: 释放资源
public class UDPService {
    public static void main(String[] args) throws IOException {
        //暴露端口
        DatagramSocket datagramSocket = new DatagramSocket(7777);
        System.out.println("服务器开启,等待客户端的数据:");
        //创建一个空的数据报包
        while (true){
            byte[] bytes=new byte[1024];
            DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
            //接收
            datagramSocket.receive(datagramPacket);
            //从数据包取数据
            byte[] data = datagramPacket.getData();
            int length = datagramPacket.getLength();
            String string = new String(data, 0, length);
            System.out.println(string);
            if ("886".equals(string))
                break;
        }

        datagramSocket.close();
    }
}

TCP

TCP发送数据步骤:

  • a: 创建TCP通讯协议客户端对象(Socket) // public Socket(String host, int port)
  • b: 获取输出流对象
  • c: 写数据
  • d: 释放资源
  Socket socket = new Socket("192.168.11.123", 8888);
        //发送数据
        //获取通道中的流
        OutputStream out = socket.getOutputStream();
        out.write("你好TCP服务端,我来了".getBytes());
        //释放资源
        socket.close();

TCP接收数据步骤

  • a: 创建TCP通讯协议服务器端对象(ServerSocket)
  • b: 监听客户端
  • c: 获取输入流对象
  • d: 读取数据
  • e: 释放资源
ServerSocket ss = new ServerSocket(8888);//暴露端口号
        //侦听 客户端的连接
        System.out.println("服务器已经开启,等待连接...");
        //一旦有客户端连接上来,就返回该套接字
        //侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
        Socket sk = ss.accept();//阻塞式方法,会阻塞在这里,等待客户端的连接

        InputStream in = sk.getInputStream();
        byte[] bytes = new byte[1024];
        int len = in.read(bytes);
        String s = new String(bytes, 0, len);
        System.out.println(s);

        //释放资源
        ss.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值