Java网络编程知识

目录

1.网络编程概述

1.网络编程的目的

2.网络编程的三个问题

1.如何准确定位网络上的主机?

2.如何定位主机上的特定应用?

3.找到主机后如何可靠高效的进行数据传输?

2.通信要素一:IP和端口号

1.IP地址

2.端口号

3.套接字

4.通信要素二:网络协议

1.使用TCP协议通信

1.客户端

2.服务器端

5.URL编程:统一资源定位符


1.网络编程概述

1.网络编程的目的

        直接或间接的通过网络协议和其他计算机实现数据交换,进行通讯。

2.网络编程的三个问题

1.如何准确定位网络上的主机?

主机:IP地址来确定

2.如何定位主机上的特定应用?

应用:端口号来确定

3.找到主机后如何可靠高效的进行数据传输?

通过网络通信协议:TCP/IP协议

2.通信要素一:IP和端口号

1.IP地址

1.IP地址:inetAddress;唯一的表示Internet上的计算机;

2.IPV4:由4个字节组成,0-255;已经用尽

   IPV6:由16个字节组成,写成8个无符号整数;更适合如今使用

3.DNS:域名解析服务器

4.一般访问网络不会去记IP地址:192.168.1.1;而是通过域名:比如:www.mi.com等来访问,然后经过DNS解析域名在网络服务器上找到相应资源。

5.本地回路地址:127.0.0.1;对应:localhost

6.实例化方法:

        getByName(String host)

        getLocalHost():获取本地地址

        getHostName():获取主机域名

        getHostAddress:获取主机IP地址

 @Test
    public void test() throws UnknownHostException {

        InetAddress ia = InetAddress.getByName("127.0.0.1");
        InetAddress localHost = InetAddress.getLocalHost();
        System.out.println(ia.getHostAddress());
        System.out.println(ia.getHostName());
        System.out.println(localHost.getHostName());
        System.out.println(localHost.getHostAddress());

    }

2.端口号

1.端口号概述:规定为16位整数:0-65535

作用:唯一标识正在计算机上运行的进程

2.端口分类:

        公认端口:0-1023;被预先定义的服务通信占用。

        注册端口:1024-49151;分配给用户进程或应用程序

        动态/私有端口:49152-65535

3.套接字

        端口号和IP地址的组合得出一个网络套接字:Socket;因此可以直接使用Socket来通信,其中已经包含了IP地址和端口号。

4.通信要素二:网络协议

1.使用TCP协议通信

1.客户端

1.创建Socket对象,指明服务器端IP和端口号

2.获取一个输出流,用于输出数据

3.写出数据的操作

4.资源关闭

//客户端
@Test
public void test1() throws IOException {

    //1.造socket对象,指明IP地址和端口号
    Socket socket = new Socket("127.0.0.1", 8899);
    //2.获取输出流,输出数据
    OutputStream os = socket.getOutputStream();
    //3.写出数据
    FileInputStream fi = new FileInputStream("hello.txt");
    byte[] buffer = new byte[1024];
    int len;
    while((len = fi.read(buffer)) != -1){
        os.write(buffer,0,len);
    }
    //read()不会主动关闭数据输出,而是继续等待传输数据,因此主动关闭数据的输出
    socket.shutdownOutput();


    //接受来自服务器的数据
    InputStream is = socket.getInputStream();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] buffer1 = new byte[1024];
    int len1;
    while((len1 = is.read(buffer1)) != -1){
        bos.write(buffer1,0,len1);
    }
    System.out.println(bos.toString());

    //4.关闭流
    fi.close();
    os.close();
    socket.close();


}

2.服务器端

1.创建服务器端ServerSocket,指明自己的端口号;IP地址默认为服务器地址

2.调用accept()方法接收来自于客户端的socket

3.获取输入流

4.读取输入流中的数据

5.关闭资源

 //服务器端
    @Test
    public void test2() throws IOException {

        //1.创建服务器端ServerSocket,指明自己的端口号;IP地址默认为服务器地址
        ServerSocket ss = new ServerSocket(8899);
        //2.调用accept()方法接收来自于客户端的socket
        Socket soc = ss.accept();
        //3.获取输入流
        InputStream is = soc.getInputStream();
        //4.读取输入流中的数据
        FileOutputStream fos = new FileOutputStream("hello2.txt");
        byte[] buffer = new byte[1024];
        int len;
        while((len = is.read(buffer)) != -1){
            fos.write(buffer,0,len);
        }

        //返回“发送成功”给客户端
        OutputStream os = soc.getOutputStream();
        os.write("已经收到文件了!".getBytes());

        //5.关闭资源
        fos.close();
        is.close();
        soc.close();
        ss.close();


    }

5.URL编程:统一资源定位符

1.标识Internet上某一资源的地址

2.URL包含五部分:

Java网络编程知识_第1张图片 

3.URL方法和编程

public static void main(String[] args) throws MalformedURLException {
    URL url = new URL("http://localhost:8899/day36/hello.txt");
    System.out.println(url.getFile());
}

你可能感兴趣的:(网络,java,开发语言)