概述

计算机网络

把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、 共享硬件、软件、数据信息等资源。

网络编程的目的

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

网络编程中有两个主要的问题

如何准确地定位网络上一台或多台主机;定位主机上的特定的应用
找到主机后如何可靠高效地进行数据传输


InetAddress类

概述

  • Internet上的主机有两种方式表示地址:

域名(hostName):www.baidu.com
IP 地址(hostAddress):202.18.35.210

  • InetAddress类主要表示IP地址,有两个子类:Inet4Address、Inet6Address。
  • InetAddress类对象含有一个Internet 主机地址的域名和IP地址

    实例化

    InetAddress类没有提供公共的构造器,而是提供了如下几个静态方法来获取 InetAddress实例

public static InetAddress getLocalHost():返回本地主机的地址。
public static InetAddress getByName(String host):根据主机名称返回IP地址。

常用方法

public String getHostAddress():返回 IP 地址字符串(以文本表现形式)。
public String getHostName():获取此 IP 地址的主机名
public boolean isReachable(int timeout):测试是否可以达到该地址


Socket

说明

  • 利用套接字(Socket)开发网络应用程序早已被广泛的采用,以至于成为事实上的标准。
  • 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
  • 通信的两端都要有Socket,是两台机器间通信的端点。
  • 网络通信其实就是Socket间的通信。
  • Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输。

    Socket分类

    流套接字(stream socket):使用TCP提供可依赖的字节流服务
    数据报套接字(datagram socket):使用UDP提供“尽力而为”的数据报服务

Socket类的常用构造器

public Socket(InetAddress address,int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
public Socket(String host,int port):创建一个流套接字并将其连接到指定主机上的指定端口号。

Socket类的常用方法

public InputStream getInputStream():返回此套接字的输入流。可以用于接收网络消息
public OutputStream getOutputStream():返回此套接字的输出流。可以用于发送网络消息
public InetAddress getInetAddress():此套接字连接到的远程 IP 地址;如果套接字是未连接的,则返回 null。
public InetAddress getLocalAddress():获取套接字绑定的本地地址。 即本端的IP地址
public int getPort():此套接字连接到的远程端口号;如果尚未连接套接字,则返回 0。
public int getLocalPort():返回此套接字绑定到的本地端口。 如果尚未绑定套接字,则返回 -1。即本端的端口号。
public void close()
关闭此套接字。套接字被关闭后,便不可在以后的网络连接中使用(即无法重新连接或重新绑定)。需要创建新的套接字对象。 关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。
public void shutdownInput()
如果在套接字上调用 shutdownInput() 后从套接字输入流读取内容,则流将返回 EOF(文件结束符)。 即不能在从此套接字的输入流中接收任何数据。
public void shutdownOutput()
禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流, 则该流将抛出 IOException。 即不能通过此套接字的输出流发送任何数据。