网络编程

2020-04-16  本文已影响0人  vv_64ce

网络编程中的两个主要问题:
1.如何准确地定位网络上一台或多台主机;定位主机上的特定的应用
2.找到主机后如何可靠高效地进行数据传输
网络编程中的两个要素
1.对应问题一:IP和端口号
2.对应问题二:网络通信协议(TCP/IP参考模型)

图片.png
3.通信要素一:IP和端口号
(1)IP:唯一的表示Intenet上的计算机
(2)在java中使用InetAddress类代表IP
(3)IP地址分为类方式一:IPV4和IPV6
IP地址分为类方式二:公网地址(万维网使用)和私有地址(局域网使用,即192.168开头,范围192.168.0.0~192.168.255.255)
4.域名: www.baidu.com
图片.png
5.本地回路地址:127.0.0.1
6.如何实例化InetAddress:getByName(String adress)、getLocalHost()
两个常用方法:getHostName() /getHostAddress()
InetAddress name = InetAddress.getByName("192.168.1.1");
        System.out.println(name);///192.168.1.1

        InetAddress name1 = InetAddress.getByName("www.baidu.com");
        System.out.println(name1);//www.baidu.com/39.156.66.18

        InetAddress localHost = InetAddress.getLocalHost();
        System.out.println(localHost);//DESKTOP-UCI6935/192.168.1.107

        String hostName = localHost.getHostName();
        String hostAddress = localHost.getHostAddress();
        System.out.println(hostName + "....." + hostAddress);//DESKTOP-UCI6935.....192.168.1.107

7.端口号:标识计算机上运行的进程(程序)
8.端口号和IP地址组合得出一个网络套接字:Socket


图片.png
三次握手和四次挥手(都针对客户端)
三次握手
四次挥手 TCP和UDP协议

TCP例题:
1.客户端发送内容到服务器,服务器将内容打印到控制台

/*
    服务器端要处于启动状态
    * 客户端发送内容到服务器,服务器将内容打印到控制台
    * */
    @Test
    public void client() throws IOException {
        //1.创建客户端连接,输入相应的ip地址和端口号(即服务器)
        Socket server = new Socket("127.0.0.1",8899);

        //2.将内容写入客户端
        OutputStream outputStream = server.getOutputStream();
        outputStream.write("你好".getBytes());
        outputStream.close();
        server.close();

    }
    @Test
    public void server() throws IOException {
        //1.创建服务器端连接,客户端通过服务器端的端口号进行连接
        ServerSocket ss = new ServerSocket(8899);
        //2.服务器端进行连接
        Socket socket = ss.accept();
        InputStream inputStream = socket.getInputStream();
//        //方式一:
//        int i;
//        byte[] c = new byte[10];
//        while ((i = inputStream.read(c)) != -1){
//           String str = new String(c,0,i);
//            System.out.println(str);
//        }
        //方式二:输出流的数据被写入一个byte数组,可通过toByteArray()和toString()获取数据
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int i;
        byte[] c = new byte[10];
        while ((i = inputStream.read(c)) != -1){
            baos.write(c,0,i);
            System.out.println(baos.toString());
        }

        inputStream.close();
        socket.close();
        ss.close();
    }

2.客户端发送文件到服务器,服务器将文件保存到本地

 /*
     * 客户端发送文件到服务器,服务器将文件保存到本地
     * */
    @Test
    public void client() throws IOException {
        String hostAddress = InetAddress.getLocalHost().getHostAddress();
        Socket socket = new Socket(hostAddress,1234);
        //客户端发送文件到服务器
        OutputStream outputStream = socket.getOutputStream();
        //发送的文件
        FileInputStream fis = new FileInputStream(new File("1.txt"));
        int i;
        byte[] c = new byte[10];
        while ((i = fis.read(c)) != -1){
           outputStream.write(c,0,i);
        }
        fis.close();
        outputStream.close();
        socket.close();
    }
    @Test
    public void server() throws IOException {
        ServerSocket ss = new ServerSocket(1234);
        Socket socket = ss.accept();
        //服务器端获取文件
        InputStream inputStream = socket.getInputStream();
        //将文件保存到本地
        FileOutputStream fos = new FileOutputStream(new File("socket.txt"));
        int i;
        byte[] c = new byte[10];
        while ((i = inputStream.read(c)) != -1){
            fos.write(c,0,i);
        }

        inputStream.close();
        fos.close();
        socket.close();

    }

3.客户端发送文件到服务器,服务器保存到本地,并返回“发送成功”给客户端,并关闭相应连接

 /*
     * 客户端发送文件到服务器,服务器保存到本地,并返回“发送成功”给客户端,并关闭相应连接
     * */
    @Test
    public void client() throws IOException {
        Socket socket = new Socket("127.0.0.1",1245);
        //将文件发送到服务器端
        //客户端发送文件到服务器
        OutputStream outputStream = socket.getOutputStream();
        //读取出发送的文件
        FileInputStream fis = new FileInputStream(new File("1.txt"));
        int i;
        byte[] c = new byte[10];
        while ((i = fis.read(c)) != -1){
            outputStream.write(c,0,i);
        }
        //关闭数据输出//
        socket.shutdownOutput();

        //3.获取到服务器发送的“发送成功”
        InputStream inputStream = socket.getInputStream();
        int x;
        byte[] b = new byte[10];
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        while ((x = inputStream.read(b)) != -1){
            baos.write(b,0,x);
        }
        System.out.println(baos.toString());

        inputStream.close();
        fis.close();
        outputStream.close();
        socket.close();



    }
    @Test
    public void server() throws IOException {
        ServerSocket ss = new ServerSocket(1245);
        Socket socket = ss.accept();
        //服务器端获取文件
        InputStream inputStream = socket.getInputStream();
        //将文件保存到本地
        FileOutputStream fos = new FileOutputStream(new File("socket.txt"));
        int i;
        byte[] c = new byte[10];
        while ((i = inputStream.read(c)) != -1){
            fos.write(c,0,i);
        }
        //3.给客户端发送接收成功
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("消息接收成功".getBytes());


        outputStream.close();
        inputStream.close();
        fos.close();
        socket.close();

    }

UDP举例

/*
    * UDP发送数据
    * */
    @Test
    public void send() throws IOException {
        //建立UDP连接
        DatagramSocket ds = new DatagramSocket();

        String str = "真开心";
        byte[] bytes = str.getBytes();
        //打包传送的数据
        DatagramPacket dp = new DatagramPacket(bytes,0,bytes.length,InetAddress.getLocalHost(),2222);
        //发送数据
        ds.send(dp);
        ds.close();

    }
    @Test
    public void receive() throws IOException {
        //建立UDP连接
        DatagramSocket ds = new DatagramSocket(2222);
        byte[] bytes = new byte[10];
        //打包接收的数据
        DatagramPacket dp = new DatagramPacket(bytes,0,bytes.length);
        //接收数据
        ds.receive(dp);
        System.out.println(new String(dp.getData(),0,dp.getLength()));
        ds.close();
    }
URL编程

URL:统一资源定位符,表示Internet上某一资源的地址
结构组成:http://localhost:8080/example/beaut.jpg?username=xx
协议 主机名 端口号 资源地址 参数列表

上一篇下一篇

猜你喜欢

热点阅读