网络编程
主机IP
在程序中表示:
(1)值的表示
IPV4:32位整数,8位一组,用.分割,例如:192.168.11.45
每个8位的范围[0,255]
IPV6:128位整数表示,16位一组,用:分割,例如:X:X:X:X:X:X:X:X
每个16位用十六进制值表示
(2)对象表示:InetAddress
此类表示互联网协议 (IP) 地址,它有两个子类Inet4Address和Inet6Address,分别对应IPV4和IPV6。InetAddress类没有提供公共的构造器,而是提供了如下几个静态方法来获取InetAddress实例。
- public static InetAddress getLocalHost()
- public static InetAddress getByAddress(byte[] addr)
- public static InetAddress getByName(String host)
InetAddress提供了如下几个常用的方法:
- public String getHostAddress():返回 IP 地址字符串(以文本表现形式)。
- public String getHostName():获取此 IP 地址的主机名
- public String getCanonicalHostName():获取此 IP 地址的完全限定域名
- public boolean isReachable(int timeout):测试是否可以达到该地址。
-
端口号
范围:[0,65535]
常见的端口号:
tomcat/JBoss:8080
http:80
mysql:3306
oracle:1521
sql server:1433
-
网络协议
-
- 应用层:网络服务与最终用户的一个接口。协议有:HTTP、FTP、SMTP、DNS、TELNET、HTTPS、POP3等等。
- 表示层:数据的表示、安全、压缩。格式有:JPEG、ASCll、DECOIC、加密格式等。
- 会话层:建立、管理、终止会话。对应主机进程,指本地主机与远程主机正在进行的会话
-
而IP协议是一种非常重要的协议。IP(internet protocal)又称为互联网协议。IP的责任就是把数据从源传送到目的地。它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。经常与IP协议放在一起的还有TCP(Transmission Control Protocol)协议,即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。而通常我们说的TCP/IP协议,其实是指TCP/IP协议族,因为该协议家族的两个最核心协议:TCP(传输控制协议)和IP(网际协议),为该家族中最早通过的标准,所以简称为TCP/IP协议。
TCP:Transmission Control Protocol 传输控制协议
-
(1)面向连接的
-
(2)可靠的
-
(3)基于字节流
-
(4)可以传输大量数据的
-
UDP:User Datagram Protocol 用户数据报协议
-
(1)非面向连接的
-
(2)不可靠的
-
(3)基于数据报的
-
(4)数据量大小有限制的64K
- 传输层:定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP、UDP。
- 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP、IGMP、IP(IPV4 IPV6)、ARP、RARP。
- 数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
- 物理层:建立、维护、断开物理连接。
-
Socket编程
Socket:套接字,代表网络通信的一端,负责和网卡驱动程序沟通的对象。
-
分为: (1)流套接字:ServerSocket和Socket (2)数据报套接字:DatagramSocket
ServerSocket的常用构造方法和其他方法:
-
- ServerSocket(int port) :指定在某个端口号监听客户端的连接和通信
- Socket accept() :监听和接收客户端的连接
- void close() :关闭
-
Socket类的常用构造方法:
- public Socket(InetAddress address,int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
- public Socket(String host,int port):创建一个流套接字并将其连接到指定主机上的指定端口号。
- public InputStream getInputStream():返回此套接字的输入流,可以用于接收消息
- public OutputStream getOutputStream():返回此套接字的输出流,可以用于发送消息
- public InetAddress getInetAddress():此套接字连接到的远程 IP 地址;如果套接字是未连接的,则返回 null。
- public void close():关闭此套接字。套接字被关闭后,便不可在以后的网络连接中使用(即无法重新连接或重新绑定)。需要创建新的套接字对象。 关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。
- public void shutdownInput():如果在套接字上调用 shutdownInput() 后从套接字输入流读取内容,则流将返回 EOF(文件结束符)。 即不能在从此套接字的输入流中接收任何数据。
- public void shutdownOutput():禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流,则该流将抛出 IOException。 即不能通过此套接字的输出流发送任何数据。
-
注意:先后调用Socket的shutdownInput()和shutdownOutput()方法,仅仅关闭了输入流和输出流,并不等于调用Socket的close()方法。在通信结束后,仍然要调用Scoket的close()方法,因为只有该方法才会释放Socket占用的资源,比如占用的本地端口号等。
DatagramSocket:
- DatagramPacket(byte[] buf, int length)
- DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
-
Socket类的常用方法: