网络编程专题

2021-06-10  本文已影响0人  攻城老狮

1 InetAddress类

public class InetAddressBaseMethod {
    public static void main(String[] args) throws UnknownHostException {
        //1.获取本机 InetAddress 对象
        InetAddress host1 = InetAddress.getLocalHost();
        System.out.println(host1);
        //2.根据主机名/域名获取 InetAddress 对象
        InetAddress host2 = InetAddress.getByName("LAPTOP-JUBVGF02");
        System.out.println(host2);
        InetAddress host3 = InetAddress.getByName("www.baidu.com");
        System.out.println(host3);

        //3.获取对象的主机名/域名
        String hostName = host1.getHostName();
        System.out.println(hostName);
        //4.获取对象的ip地址
        String hostAddress = host1.getHostAddress();
        System.out.println(hostAddress);
    }
}

2 基于Socket的TCP编程

2.1 使用字节流,完成C/S的通讯过程

public class SocketServer {
    public static void main(String[] args) throws IOException {
        //1.在本机8081端口监听,serverSocket可以通过accept()返回多个Socket
        ServerSocket serverSocket = new ServerSocket(8081);
        //2.等待客户端连接8081端口,阻塞等待
        Socket socket = serverSocket.accept();
        //3.读取客户端写入到数据通道的数据
        InputStream inputStream = socket.getInputStream();
        byte[] buf = new byte[64];
        int len;
        while ((len = inputStream.read(buf))!=-1){
            System.out.println(new String(buf,0,len));
        }
        //4.写回传递给客户端的数据
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("get your msg".getBytes());
        //设置结束标记
        socket.shutdownOutput();
        //5.关闭连接
        outputStream.close();
        inputStream.close();
        socket.close();
        serverSocket.close();
    }
}
public class SocketClient {
    public static void main(String[] args) throws IOException {
        //1.连接服务器(ip,port)
        Socket socket = new Socket("192.168.137.1",8081);
        //2.写入传递给服务器端的数据
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello server".getBytes());
        //设置结束标记
        socket.shutdownOutput();
        //3.读取服务器传递的数据
        InputStream inputStream = socket.getInputStream();
        byte[] buf = new byte[64];
        int len;
        while ((len = inputStream.read(buf))!=-1){
            System.out.println(new String(buf,0,len));
        }
        //4.关闭连接
        inputStream.close();
        outputStream.close();
        socket.close();
    }
}

2.2 使用字符流,完成C/S的通讯过程

public class SocketServer {
    public static void main(String[] args) throws IOException {
        //1.在本机8081端口监听,serverSocket可以通过accept()返回多个Socket
        ServerSocket serverSocket = new ServerSocket(8081);
        //2.等待客户端连接8081端口,阻塞等待
        Socket socket = serverSocket.accept();
        //3.读取客户端写入到数据通道的数据
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String readLine = br.readLine();
        System.out.println(readLine);
        //4.写回传递给客户端的数据
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bw.write("get your msg");
        bw.newLine();
        bw.flush();
        //5.关闭连接
        bw.close();
        br.close();
        socket.close();
        serverSocket.close();
    }
}
public class SocketClient {
    public static void main(String[] args) throws IOException {
        //1.连接服务器(ip,port)
        Socket socket = new Socket("192.168.137.1",8081);
        //2.写入传递给服务器端的数据
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bw.write("hello server");
        bw.newLine();
        bw.flush();
        //3.读取服务器传递的数据
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String readLine = br.readLine();
        System.out.println(readLine);
        //4.关闭连接
        br.close();
        bw.close();
        socket.close();
    }
}

3 基于Socket的UDP编程

public class SocketServer {
    public static void main(String[] args) throws IOException {
        //1.创建一个 DatagramSocket 对象,准备在8081端口接收数据
        DatagramSocket socket = new DatagramSocket(8081);
        //2.构建 DatagramPacket 对象,准备接收数据
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        //3.调用接收方法,阻塞等待
        socket.receive(packet);
        //4.拆包,取出数据并显示
        int length = packet.getLength();
        byte[] data = packet.getData();
        System.out.println(new String(data,0,length));
        
        //5.回复消息
        buf = "get your msg".getBytes();
        packet = new DatagramPacket(buf,buf.length, InetAddress.getByName("192.168.137.1"),8082);
        socket.send(packet);

        //6.关闭资源
        socket.close();
    }
}
public class SocketClient {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(8082);

        byte[] data = "hello server".getBytes();
        DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.137.1"),8081);
        socket.send(packet);

        byte[] buf = new byte[1024];
        packet = new DatagramPacket(buf,buf.length);
        socket.receive(packet);
        int length = packet.getLength();
        data = packet.getData();
        System.out.println(new String(data,0,length));

        socket.close();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读