跳转至

Java 网络

1. 网络

方法名 作用
public static InetAddress getLocalHost() 获得主机名和IP地址
public String getHostAddress() 获取IP地址
public String getHostName() 获取主机名
public static InetAddress getByName(String host)final void notifyAll() 根据主机名获得IP地址

百度案例

package network;

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

/**
 * @author summer
 * @create 2020-02-09 16:26
 */
public class InetAddressDemo {
    public static void main(String[] args) throws UnknownHostException {
        InetAddress localHost = InetAddress.getLocalHost();
        System.out.println(localHost);
        //获得百度信息,注意事项:有可能返回的主机ip有很多,只是显示了中的一个
        InetAddress inetAdd = InetAddress.getByName("www.baidu.com");
        System.out.println(inetAdd);
//        System.out.println(inetAdd.getAddress());
        System.out.println(inetAdd.getHostAddress());
        System.out.println(inetAdd.getHostName());
    }
}
输出
cmz/192.168.71.1
www.baidu.com/180.101.49.12
180.101.49.12
www.baidu.com

2. 传输协议

2.1 UDP

  • 相当于収短信(有字数限制),
  • 不需要建立连接,
  • 数据报的大小限制在64k内,
  • 效率较高,不安全,容易丢包

2.2 TCP

  • 相当于打电话,需要建立连接,
  • 效率相对比较低,数据传输安全,
  • 三次握手完成。
  • (点名答到确认)

2.3 Socket套接字

  • 网络上的两个程序通过一个双向的通信连接实现数据的交换,
  • 这个连接的一端称为一个socket。 ▪ Java中使用Socket完成TCP程序的开収,使用此类可以方便的建立可靠的、双向的、持续性的、点对点的通讯连接
  • 在Socket的程序开収中,服务器端使用ServerSocket等待客户端的连接,
  • 对于java的网络程序来讲,每一个客户端都使用一个Socket对象表示
socket
       ------ accept() ------ 服务器 server socket
socket 

2.3 基于TCP协议的Socket编程

  • 进行网络通信时,Socket需要借助数据流来完成数据的传递工作

基于TCP协议的Socket编程

1. 客户端
---------                           ---------  
| 客户端  |     getoutputStream()    | 服务器  |
|        |------------------------->|        |
| 创建的  |                          |        |
| socket |  指定主机指定端口           |        |
| 对象    |                          |        | 
|        |<-------------------------|        |
----------      getInputStream()    ----------  



      客户端                             实现单用户登录

     建立连接                       Socket socket=new Socket("localhost",8800);
        |
        V
     打开socket关联的输入输出流     OutputStream os=socket.getOutputStream();
        |
        V
     数据流中读写信息               String info="用户名:Tom;用户密码:123456";
        |                           os.write(info.getBytes());
        V                           socket.shutdownOutput();
     关闭所有数据流和socket         os.close();
                                    socket.close();

---------------------------------------------------------------------------                                   
2. 服务端
建立连接,处理发送到指定端口的数据   ServerSocket server=new ServerSocket(8800);
        |
        V                           Socket socket=server.accept();
   获取客户端对象                   InputStream is=socket.getInputStream();
        |                           byte[] buf=new byte[1024];
        V                           int len=is.read(buf);
数据流中读写信息                    syso(new String(buf,0,len))
        |                           socket.shutdownInput();
        V
关闭所有的数据流和Socket            is.close();
                                    socket.close();
                                    server.close();