Java笔记第十弹

网络编程三要素

1、IP地址--设备的标识

2、端口--应用程序的标识

3、协议--常见的协议有UDP协议和TCP协议

IP地址

1、IPv4(二进制数据)

2、IPv6

常用命令:
ipconfig:查看本机IP地址
   ping IP地址:检查网络是否连通

特殊的IP地址:

127.0.0.1:是回送地址,可以代表本机地址,一般用来测试使用
InetAddress的使用(类)
//表示InetAddress协议的地址
//方法
static InetAddress getByName(String host);//确定主机名称的IP地址,主机名称可以是机器名称,也可以是IP地址
String getHostName();//获取此IP地址的主机名
String getHostAddress();//返回文本显示中的IP地址字符串
相关应用:
import java.net.InetAddress;
import java.net.UnknownHostException;

public class Main{
    public static void main(String[] args) throws UnknownHostException {
        InetAddress ia=InetAddress.getByName("刘紫锦");//可以是主机名,也可以是IP地址

        String name=ia.getHostName();

        String ip=ia.getHostAddress();
        System.out.println("主机名:"+name);
        System.out.println("Ip地址:"+ip);
       }
}
端口(设备上应用程序的唯一标识)
协议
1、UDP协议

消耗小,通信效率高,通常都会用于音频视频普通数据的传输

2、TCP协议

三次握手--保证连接的可靠性

可以保证传输数据的安全性可靠性

UDP通信程序

UDP发送数据
//步骤:
//创建发送端的Socket对象(DatagramSocket)
//创建数据,并把数据打包
//调用DatagramSocket象的方法发送数据
//关闭发送端
相关应用:
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.net.DatagramSocket;

public class Main{
    public static void main(String[] args) throws UnknownHostException, SocketException {
        //创建对象
        DatagramSocket ds=new DatagramSocket();
        //创建数据,并把数据打包
        
        //构造一个数据包
        byte[] by="hello,udp,我来啦!".getBytes();
        int length=by.length;
        InetAddress ia=InetAddress.getByName("liuzijin");
        int port=10086;//端口号
        DatagramSocket dp=new DatagramSocket(by,by.length,InetAddress.getByName("liuzijin"),10086);
        //发送数据
        ds.send(dp);
        //关闭发送端
        ds.close();
       }
}
UDP接收数据
import java.net.UnknownHostException;
import java.net.DatagramSocket;
import java.net.SocketException;

public class Main{
    public static void main(String[] args) throws UnknownHostException, SocketException {
        //创建接收对象
        DatagramSocket ds=new DatagramSocket(10086);
        byte[] by=new byte[1024];
        DatagramSocket dp=new DatagramSocket(by,by.length);
        
        ds.receive(dp);
        //返回数据缓冲区
        byte[] bb=dp.getData();
        String dataString=new String(bb,0,bb.getLength());
        System.out.println("数据是:"+dataString);
        ds.close();
       }
}
案例:
//send.java
import java.io.*;
import java.net.InetAddress;
import java.net.DatagramSocket;

public class Main{
    public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket();
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String line;
        while((line=br.readLine())!=null){
            if("886".equals(line)){
                break;
            }else{
                byte[] by=line.getBytes();
                DatagramSocket dp=new DatagramSocket(by,by.length,InetAddress.getByName("liuzijin"),12345);
                ds.send(dp);
                ds.close();
            }
        }
       }
}
//receive.java
import java.io.*;
import java.net.DatagramSocket;

public class Main{
    public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket(12345);
        while(true) {
            byte[] by = new byte[1024];
            DatagramSocket dp = new DatagramSocket(by, by.length);

            ds.receive(dp);
            System.out.println("数据是:" + new String(dp.getData(), 0, dp.getLength()));

        }
        
    }
}
posted @ 2022-08-03 20:28  yesyes1  阅读(28)  评论(0编辑  收藏  举报