2021-10-24(java-网络编程)

1.计算机网络概念

        JavaWeb : 网页编程 B/S架构
        网络编程: TCP/IP C/S架构

        TCP/IP模型:

                应用层---传输层--网络层--数据链路层

        网络编程中的要素
    IP 和 端口号
    网络通信

2.IP

        ip地址:InetAddress

  1.唯一定位一台网络上计算机
  2.127.0.0.1: 本机localhost
  3.ip地址的分类
    IPV4/IPv6

package cn.bloghut.lesson01;

import java.net.InetAddress;
import java.net.UnknownHostException;


public class TestInetAddress {
    public static void main(String[] args) throws Exception {
        //查询本机的ip地址
        InetAddress localhost = InetAddress.getByName("localhost");
        System.out.println(localhost);

        InetAddress localHost = InetAddress.getLocalHost();
        System.out.println(localHost);
        System.out.println("=================");
        //查询网站ip地址
        InetAddress name = InetAddress.getByName("www.baidu.com");
        System.out.println(name);
        System.out.println("=================");
        //常用方法
        //System.out.println(name.getAddress());
        System.out.println(name.getHostAddress());//获取主机ip地址
        System.out.println(name.getHostName());// 获取域名
        System.out.println(name.getCanonicalHostName());//获取规范的主机ip地址
    }
}

3.端口(计算机一个进程)

        TCP ,UDP: 每个都有 0-65535 * 2 ,单个协议下,端口号不能冲突

        下列是百度端口号

                        HTTP : 80
      HTTPS :443
      FTP : 21
      Telet : 23

package cn.bloghut.lesson01;

import java.net.InetSocketAddress;

public class TesyInetSocketAddress {
    public static void main(String[] args) {

        InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8080);
        InetSocketAddress socketAddress1 = new InetSocketAddress("localhost", 8080);

        System.out.println(socketAddress);
        System.out.println(socketAddress1);
        System.out.println("====================");

        System.out.println(socketAddress.getAddress());//ip地址
        System.out.println(socketAddress.getHostName());//主机名称
        System.out.println(socketAddress.getHostString());
        System.out.println(socketAddress.getPort());//端口
        
    }
}

4.通信协议

        TCP:用户传输协议
   UDP:用户数据报协议

        TCP和UDP 对比:

                TCP:
            连接: 稳定
            三次握手

                      四次挥手

                      客户端,服务端
           传输完成,释放连接、效率低

              UDP:发短信
                  1.不连接,不稳定
                  2.客户端、服务端:没有明确的界限
                  3.不管有没有准备好,都可以发给你

/* 客户端*/
package cn.bloghut.lesson02;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class TcpClientDemo1 {

    public static void main(String[] args) throws Exception{
        Socket socket = null;
        OutputStream os = null;
        //要知道服务器地址
        try {
            InetAddress serverIp = InetAddress.getByName("localhost");
            int port = 9999;
            //2.创建连接
            socket = new Socket(serverIp,port);
            //3.发生消息 IO流
            os = socket.getOutputStream();
            os.write("你好".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (os != null) {
                os.close();
            }
            if (socket != null) {
                socket.close();
            }

        }


    }
}
/*服务器*/
package cn.bloghut.lesson02;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServerDemo01 {

    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = null;
        Socket accept = null;
        InputStream is = null;
        ByteArrayOutputStream baos = null;
        try {
            //1. 我得有一个地址
            serverSocket = new ServerSocket(9999);
            //2.等待客户端连接过来
            accept = serverSocket.accept();
            //3.读取客户端消息
            is = accept.getInputStream();

        /*byte[] buf = new byte[1024];
        int len;
        while ((len = is.read(buf)) != -1 ){
            String s = new String(buf, 0, len);
            System.out.println(s);
        }*/
            //管道流
            baos = new ByteArrayOutputStream();
            byte[] buff = new byte[1024];
            int len = -1;

            while ((len = is.read(buff)) != -1) {
                baos.write(buff, 0, len);
            }
            System.out.println(baos.toString());

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (baos != null) {
                baos.close();
            }
            if (is != null) {
                is.close();
            }
            if (accept != null) {
                accept.close();
            }
            if (serverSocket != null) {
                serverSocket.close();
            }
        }
    }


}


 

        

おすすめ

転載: blog.csdn.net/qq_45688193/article/details/120942233