day22:AnetAddress/UDP/TCP

本文介绍了网络通信的基础知识,包括协议的作用,UDP和TCP协议的特点,如UDP的无连接性和TCP的可靠性。此外,详细阐述了IP地址的概念,以及如何在Java中使用DatagramSocket和Socket进行UDP和TCP的发送与接收操作。
摘要由CSDN通过智能技术生成

AnetAddress
    网络通信三要素
        协议
            网络通信协议
                计算机进行数据传输 需要遵守的规则
                UDP协议特点
                     面向无连接的通信协议 两台计算机进行数据交互不需要建立连接
                     发送端直接给接收端发送数据  接收端接收到数据也不会给发送端回应
                    UDP不需要建立连接 消耗资源少 发送速率快 但是每次发送数据不能超过64KB
不能保证数据的完整性
                TCP协议特点
                    面向连接的通信协议 两台计算机要想进行数据交互必须建立连接
            客户端----->服务端
            客户端<----服务端
            客户端----->服务端
                     建立连接 消耗资源多 发送速率慢 但是发送数据无限制 可以保证数据的可靠性
        IP
            计算机进入到网络中的唯一标识
                IPv4:4个字节大小的二进制数来表示 每个字节用一个十进制数字(0-255)表示,数字间用符号“.”分开,如 “192.168.1.100”。
IPv6:采用128位地址长度,每16个字节一组,分成8组十六进制数,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
            查看本机IP
               ipconfig
检测两台计算机是否能够建立连接
               ping 网址/IP
两个特殊的IP地址
                127.0.0.1
                localhost    本地主机/当前计算机的IP
        端口号
            用来标识应用程序
用两个字节表示的整数,它的取值范围是0~65535  前1024已经被占用
    java.net.InetAddress
    静态方法
        static InetAddress getLocalHost() 返回本地主机
static InetAddress getByName(String host)  返回指定主机 host可以是IP 主机名 网址
            InetAddress host = InetAddress.getLocalHost();
            InetAddress byName = InetAddress.getByName("192.168.5.7");
    方法
        String getHostName()  获取主机名
String getHostAddress() 获取String IP

UDP
    UDP发送端
        java.net.DatagramSocket
            构造方法
                public DatagramSocket()
            方法
                void send(DatagramPacket p) 发送数据包
        发送端数据包
            java.net.DatagramPacket
                构造方法
                    public DatagramPacket(byte[] bytes,int length,InetAddress ip,int port)
用来将长度为 length 的包发送到指定主机上的指定端口号。
            1.创建发送端对象
2.创建数据包对象 封装数据
3.调用发送端的send方法 发送数据包
4.关闭资源
                DatagramSocket ds = new DatagramSocket();
                DatagramPacket dp = new DatagramPacket(bytes,bytes.length,ip,8888);
                ds.send(dp);
                ds.close();
    UDP接收端
        java.net.DatagramSocket
            构造方法
                public DatagramSocket(int port)创建接收端对象 并将其绑定到本地主机上的指定端口。
            方法
                void receive(DatagramPacket p) 接收数据包
        接收端数据包
            java.net.DatagramPacket
                构造方法
                    DatagramPacket(byte[] buf, int length) 用来接收长度为 length 的数据包。
                方法
                    InetAddress getAddress() 获取发送端IP地址
int getLength() 获取接收数据的长度
int getPort() 获取发送端端口
            1.创建接收端对象
2.创建接收端数据包对象
3.调用接收端的receive接收数据
4.拆包
5.关闭资源
                DatagramSocket ds = new DatagramSocket(8888);
                DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
                ds.receive(dp);
                InetAddress ip = dp.getAddress();
int port = dp.getPort();
int length = dp.getLength();
new String(bytes,0,length)
                ds.close();

TCP
    TCPClient客户端
        java.net.Socket
            构造方法
                public Socket(String ip ,int port)  创建客户端对象 连接服务端
public Socket(InetAddress ip ,int port)
            方法
                InputStream getInputStream() 获取字节输入流
OutputStream getOutputSteam() 获取字节输出流
        1.创建客户端对象
2.获取字节输出流对象
3.向服务端 发送数据
4.获取字节输入流对象
5.接收服务端返回的数据
6.关闭资源
            Socket  s = new Socket("127.0.0.1",9999);
            OutputStream out = s.getOutputStream();
            out.write("你好".getBytes());
            InputStream in = s.getInputStream();
            byte[] bytes = new byte[1024];
int len = in.read(bytes);
System.out.println(new String(bytes,0,len));
            in.close();
out.close();
s.close();
    TCPServer服务端
        java.net.ServerSocket
            构造方法
                public ServerSocket(int port) 创建服务端对象 绑定端口
            方法
                Socket  accept()获取正在连接的客户端对象
        1.创建服务端对象 绑定端口
2.调用accept方法 获取正在连接的客户端对象
3.使用客户端 获取字节输入流对象
4.接收客户端发送的数据
5.使用客户端 获取字节输出流对象
6.向当前客户端 返回数据
7.关闭资源
            ServerSocket ss = new ServerSocket(9999);
            Socket s = ss.accept();
            InputStream in = s.getInputStream();
            byte[] bytes = new byte[1024];
int len = in.read(bytes);
System.out.println(new String(bytes,0,len));
            OutputStream out = s.getOutputStream();
            out.write("哈喽,冰冰".getBytes());
            out.close();
in.close();
s.close();
ss.close();
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值