Java基础十七:网络编程入门InetAddress类、端口与协议、UDP通信程序、UDP接收数据、UDP通信程序练习

网络编程入门

网络编程三要素:IP地址、端口、协议(UDP协议、TCP协议)

IP地址:是网络中设备的唯一标识

IP地址分两大类:IPV4、IPV6

ipconfig: 查看本机IP地址

Ping  IP地址: 检查网络是否连通

127.0.0.1:是回送地址,可以代表本机地址,一般用来测试

1、InetAddress类

InetAddress: 此类表示Internet协议(IP)地址,三个常用方法:如下

1、Static InetAddress getByName(String host): 确定主机名称的IP地址,主机名称可以是机器名称,也可以是IP地址

2、String getHostName():获取此IP地址的主机名

3、String getHostAddress(): 返回文本显示的IP地址字符串

public class InetAddressDemo1 {
   public static void main(String[] args) throws UnknownHostException{
       //获取本机主机名称对象,两种都可以,推荐直接使用IP地址
       InetAddress address = InetAddress.getByName("XTZ-20191115MAD");
       InetAddress address1 = InetAddress.getByName("192.168.56.1");
       //获取主机名称
       String Name = address.getHostName();
       //获取主机IP地址
       String ip = address.getHostAddress();
       System.out.println("主机名:"+Name);
       System.out.println("IP地址:"+ip);
   }
}

2、端口、协议

端口号:取值范围0~65535 其中 0~1023中间的值不能取,有特殊意义,只能取1024以上的端口号

UDP协议:是无连接通信协议,不能保证数据完整性,重要数据输时不建议使用UDP协议

TCP协议:是面向连接的通信协议,提供可靠无差错的数据传输,每次连接都要经过三次握手

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

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

第三次握手:客户端再次向服务器端发送确认消息,确认连接

3、UDP通信程序

UDP发送数据步骤:

1、创建发送端的Socket对象(DatagramSocket)

2、创建数据,并把数据打包

3、调用DatagramSocket对象的方法发送数据

4、关闭发送端

//UDP发送数据
public class UDPSendDemo1 {
   public static void main(String[] args) throws IOException {
       //1、创建发送端的Socket对象(DatagramSocket)
       DatagramSocket ds = new DatagramSocket();
       //2、创建数据,并把数据打包
       byte[] bys = "hello world".getBytes();
       /*int length = bys.length;
       InetAddress address = InetAddress.getByName("192.168.56.1");
       int port = 10086;*/

//优化上面的代码
       //DatagramPacket dp = new DatagramPacket(bys,length,address,port);
       DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("192.168.56.1"),10086);
       //3、调用DatagramSocket对象的方法发送数据
       ds.send(dp);
       ds.close();
   }
}

4、UDP接收数据

1、创建接收端的Socket对象(DtagramSocket)

2、创建一个数据包,用于接收数据

3、调用DatagramSocket对象的方法接收数据

4、解析数据包,并把数据在控制台显示

5、关闭接收端

//UDP接收数据
public class UDPReceiveDemo2 {
   public static void main(String[] args) throws IOException {
       //1、创建接收端的Socket对象(DtagramSocket)
       DatagramSocket ds = new DatagramSocket(10086);
       //2、创建一个数据包,用于接收数据
       byte[] bys = new byte[1024];
       DatagramPacket dp = new DatagramPacket(bys,bys.length);
       //3、调用DatagramSocket对象的方法接收数据
       ds.receive(dp);
       //4、解析数据包,并把数据在控制台显示
      /* byte[] datas = dp.getData();//这个方法拿到的是数据缓冲区
       int len = dp.getLength();//返回要发送的数据长度或接收到的实际数据长度
       String dataString = new String(datas,0,len);
       System.out.println("数据是:"+dataString);*/
      //优化上面的代码
       System.out.println("数据是:"+new String(dp.getData(),0,dp.getLength()));
       //5、关闭接收端
       ds.close();
   }
}

5、UDP通信程序练习

/*UDP案例小练习:
1、UDP发送数据:数据来自于键盘录入,直到输入数据886,发送数据结束
2、UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采用死循环接收
* */


//UDP发送数据
public class UDPSend {
   public static void main(String[] args) throws IOException {
       //1、创建发送端的Socket对象(DatagramSocket)
       DatagramSocket ds = new DatagramSocket();
       //自己封装键盘录入数据
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       String line;
       while((line = br.readLine())!=null){
           //输入的数据是886,发送数据结束
           if("886".equals(line)){
               break;
           }
           //创建数据,并把数据打包
           byte[] bys = line.getBytes();
           DatagramPacket dp = new DatagramPacket(bys,bys.length, InetAddress.getByName("192.168.56.1"),12345);
          //调用DatagramSocket对象的方法发送数据
           ds.send(dp);
       }
       //关闭发送端
       ds.close();

   }
}

 

//UDP接收数据
public class UDPReceive {
   public static void main(String[] args) throws IOException {
       //创建接收端的Socket对象(DtagramSocket)
       DatagramSocket ds = new DatagramSocket(12345);
       //因为不知道发送端会发来多少数据,所以做成死循环,接收端也不用关闭了
       while(true) {
           //创建一个数据包,用于接收数据
           byte[] bys = new byte[1024];
           DatagramPacket dp = new DatagramPacket(bys, bys.length);
           //调用DatagramSocket对象的方法接收数据
           ds.receive(dp);
           //解析数据包,并把数据在控制台显示
           System.out.println("数据是:" + new String(dp.getData(), 0, dp.getLength()));
       }
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蜀州凯哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值