java高级day06

网络编程

InetAddress

JDK中提供了一个InetAdderss类,该类用于封装一个IP地址,并提供了一系列与IP地址相关的方法,下表中列出了InetAddress类的一些常用方法。

InetAddress的常用方法,如下所示。

public class Example01 {

    public static void main(String[] args) throws Exception {

        InetAddress local = InetAddress.getLocalHost();

        InetAddress remote = InetAddress.getByName("www.itcast.cn");

        System.out.println("本机的IP地址:" + local.getHostAddress());

        System.out.println("itcast的IP地址:" + remote.getHostAddress());

        System.out.println("itcast的主机名为:" + remote.getHostName());

    }

}

UDP通信

  1. UDP完成数据的发送

/*

* 发送端

 * 1,创建DatagramSocket对象

 * 2,创建DatagramPacket对象,并封装数据

 * 3,发送数据

 * 4,释放流资源

 */

public class UDPSend {

    public static void main(String[] args) throws IOException {

        //1,创建DatagramSocket对象

        DatagramSocket sendSocket = new DatagramSocket();

        //2,创建DatagramPacket对象,并封装数据

        //public DatagramPacket(byte[] buf, int length, InetAddress address,  int port)

        //构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

        byte[] buffer = "hello,UDP".getBytes();

        DatagramPacket dp = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("192.168.75.58"), 12306);

        //3,发送数据

        //public void send(DatagramPacket p) 从此套接字发送数据报包

        sendSocket.send(dp);

        //4,释放流资源

        sendSocket.close();

    }

}

 

  1. UDP完成数据的接收

/*

 * UDP接收端

 *

 * 1,创建DatagramSocket对象

 * 2,创建DatagramPacket对象

 * 3,接收数据存储到DatagramPacket对象中

 * 4,获取DatagramPacket对象的内容

 * 5,释放流资源

 */

public class UDPReceive {

    public static void main(String[] args) throws IOException {

        //1,创建DatagramSocket对象,并指定端口号

        DatagramSocket receiveSocket = new DatagramSocket(12306);

        //2,创建DatagramPacket对象, 创建一个空的仓库

        byte[] buffer = new byte[1024];

        DatagramPacket dp = new DatagramPacket(buffer, 1024);

        //3,接收数据存储到DatagramPacket对象中

        receiveSocket.receive(dp);

        //4,获取DatagramPacket对象的内容

        //谁发来的数据  getAddress()

        InetAddress ipAddress = dp.getAddress();

        String ip = ipAddress.getHostAddress();//获取到了IP地址

        //发来了什么数据  getData()

        byte[] data = dp.getData();

        //发来了多少数据 getLenth()

        int length = dp.getLength();

        //显示收到的数据

        String dataStr = new String(data,0,length);

        System.out.println("IP地址:"+ip+ "数据是"+ dataStr);

        //5,释放流资源

        receiveSocket.close();

    }

}

简单的TCP网络程序

/*

 * TCP 服务器端

 *

 * 1,创建服务器ServerSocket对象(指定服务器端口号)

 * 2,开启服务器了,等待客户端的连接,当客户端连接后,可以获取到连接服务器的客户端Socket对象

 * 3,给客户端反馈信息

 * 4,关闭流资源

 */

public class TCPServer {

    public static void main(String[] args) throws IOException {

        //1,创建服务器ServerSocket对象(指定服务器端口号)

        ServerSocket ss = new ServerSocket(8888);

        //2,开启服务器了,等待客户端的连接,当客户端连接后,可以获取到连接服务器的客户端Socket对象

        Socket s = ss.accept();

        //3,给客户端反馈信息

        /*

         * a,获取客户端的输出流

         * b,在服务端端,通过客户端的输出流写数据给客户端

         */

        //a,获取客户端的输出流

        OutputStream out = s.getOutputStream();

        //b,在服务端端,通过客户端的输出流写数据给客户端

        out.write("你已经连接上了服务器".getBytes());

        //4,关闭流资源

        out.close();

        s.close();

        //ss.close();  服务器流 通常都是不关闭的

    }

}

 

完成了服务器端程序的编写,接下来编写客户端程序。

/*

 * TCP 客户端

 *

 * 1,创建客户端Socket对象,(指定要连接的服务器地址与端口号)

 * 2,获取服务器端的反馈回来的信息

 * 3,关闭流资源

 */

public class TCPClient {

    public static void main(String[] args) throws IOException {

        //1,创建客户端Socket对象,(指定要连接的服务器地址与端口号)

        Socket s = new Socket("192.168.74.58", 8888);

        //2,获取服务器端的反馈回来的信息

        InputStream in = s.getInputStream();

        //获取获取流中的数据

        byte[] buffer = new byte[1024];

        //把流中的数据存储到数组中,并记录读取字节的个数

        int length = in.read(buffer);

        //显示数据

        System.out.println( new String(buffer, 0 , length) );

        //3,关闭流资源

        in.close();

        s.close();

    }

}

猜你喜欢

转载自blog.csdn.net/Shi_Yuan_Csdn/article/details/81875935
今日推荐