网络编程
1.网络的优势
所谓计算机网络,就是把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。
计算机网络是现代通信技术与计算机技术相结合的产物,计算机网络可以提供以下一些主要功能.
资源共享。
信息传输与集中处理。
均衡负荷与分布处理。
综合信息服务。
2.按规模的三种分类
局域网(LAN):指在一个较小地理范围内的各种计算机网络设备互连在一起的通信网络,可以包含一个或多个子网,通常局限在几千米的范围之内。
城域网(MAN):主要是由城域范围内的各局域网之间互连而构成的,现在很少提起这个概念。
广域网(WAN):是由相距较远的局域网或城域网互连而成,通常是除了计算机设备以外,还要涉及一些电信通讯方式。
3.IP地址
IP地址用于标识网络中的一个通信实体,这个通信实体可以是一台主机,也可以是一台打印机,或者是路由器的某一个端口。而在基于IP协议网络中传输的数据包,都必须使用IP地址来进行标识。
IP地址是数字型的,IP地址是一个32位(32bit)整数,但通常为了更加便于记忆,通常也把它分成4个8位的二进制数组成,每8位之间用圆点隔开,每个8位整数可以转换成一个0~255的十进制整数,因此我们看到的IP地址常常是如下形式:202.9.128.88。
4.端口
端口是一个16位的整数,用于表示数据交给哪个通信程序处理。因此,端口是应用程序与外界交流的出入口,它是一种抽象的软件结构,包括一些数据结构和I/O(基本输入/输出)缓冲区。
不同的应用程序处理不同端口上的数据,同一台机器上不能有两个程序使用同一个端口,端口号可以从0到65535,通常将它分为三类:
公认端口(Well Known Ports):从0到1023,它们紧密绑定(Binding)一些服务。
注册端口(Registered Ports):从1024到49151。它们松散地绑定一些服务。
动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535,这些端口是应用程序使用的动态端口,应用程序一般不会主动使用这些端口。
用于实现程序间的通信
常用的端口
协议 | 端口 |
---|---|
Telnet协议 | 23 |
简单邮件传输协议 | 25 |
文件传输协议 | 21 |
超文本传输协议 | 80 |
5.ServerSocket
ServerSocket:用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状态。
Socket accept():如果接收到一个客户端Socket的连接请求,该方法将返回一个与连客户端Socket对应的Socket;否则该方法将一直处于等待状态,线程也被阻塞。
ServerSocket类提供了如下几个构造器:
ServerSocket(int port):用指定的端口port来创建一个ServerSocket。该端口应该是有一个有效的端口整数值:0~65535。
ServerSocket(int port,int backlog):增加一个用来改变连接队列长度的参数backlog。
ServerSocket(int port,int backlog,InetAddress localAddr):在机器存在多个 IP地址的情况下,允许通过localAddr这个参数来指定将ServerSocket绑定到指定的IP地址。
ServerSocket类的主要方法
方法 | 类型 | 描述 |
---|---|---|
public ServerSocket(int port) | 构造方法 | 创建ServerSocket实例 |
public Socket accept() | 方法 | 等待客户端连接 |
public InetAddress getInetAddress() | 方法 | 返回服务器的IP地址 |
public boolean isClosed() | 方法 | 返回ServerSocket的关闭状态 |
public void close() | 方法 | 关闭ServerSocket |
6.Socket
客户端通常可使用Socket的构造器来连接到指定服务器,
Socket(InetAddress/String remoteAddress, int port):创建连接到指定远程主机、远程端口的Socket,默认使用本地主机的默认IP地址,默认使用系统动态指定的IP地址。
Socket(InetAddress/String remoteAddress, int port, InetAddress localAddr, int localPort)::创建连接到指定远程主机、远程端口的Socket,并指定本地IP地址和本地端口号,适用于本地主机有多个IP地址的情形。
Socket类常用方法
方法 | 类型 | 描述 |
---|---|---|
public Socket(String host,int port) | 构造方法 | 构造Socket对象,同时指定要连接服务器的主机名和端口号 |
public InputStream getInputStream() | 方法 | 返回套接字的输入流 |
public OutputStream getOutputStream() | 方法 | 返回套接字的输出流 |
public boolean isClosed() | 方法 | 判断套接字是否关闭 |
public void close() | 方法 | 关闭此Socket |
7.InetAddress类
InetAddress类用于表示计算机地址
主要方法
方法 | 类型 | 描述 |
---|---|---|
public static InetAddress getByName(String host) | 方法 | 通过主机名或IP地址得到一个InetAddress对象 |
public String getHostName() | 方法 | 获取IP地址对应的主机名 |
public String getHostAddress() | 方法 | 返回IP地址字符串 |
8.网络通信
客户端、服务器端产生了对应的Socket之后,程序无需再区分服务器、客户端,而是通过各自的Socket进行通信,Socket提供如下两个方法来获取输入流和输出流:
InputStream getInputStream():返回该Socket对象对应的输入流,让程序通过该输入流从Socket中取出数据。
OutputStream getOutputStream():返回该Socket对象对应的输出流,让程序通过该输出流向Socket中输出数据。
9.TCP网络编程概述
具体操作步骤
服务器程序创建一个ServerSocket,然后再用accept方法等待客户来连接
客户端程序创建一个Socket并请求与服务器建立连接
服务器接收客户的连接请求,并创建一个新的Socket与该客户建立专线连接
刚才建立了连接的两个Socket在一个线程上对话
服务器开始等待新的连接请求`