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();