美文网首页
网络编程

网络编程

作者: vv_64ce | 来源:发表于2020-04-16 22:55 被阅读0次

    网络编程中的两个主要问题:
    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
    协议 主机名 端口号 资源地址 参数列表

    相关文章

      网友评论

          本文标题:网络编程

          本文链接:https://www.haomeiwen.com/subject/fvjjvhtx.html