以下内容引用自:
术语网络编程指编写跨多种设备(电脑)执行的,设备使用一个网络互相连接的程序。
J2SE API的java.net包包含了一个类的集合和提供底层通信细节的接口,允许编写专注解决即将到来的问题的程序。
java.net包为两种常用的网络协议提供支持:
TCP:TCP代表传输控制协议,允许两个应用程序间的可靠通信。TCP通常在因特网协议上被使用,这被称为TCP/IP。
UDP:UDP代表用户数据报协议,一个无连接的允许应用程序间数据包传输的协议。
以下两个主题提供更好的理解:
套接字编程:这是在网络中最广泛使用的概念并且被很详细地解释。
URL处理:这将被个别地解释。
一、套接字编程
套接字利用TCP在两台电脑间提供通信机制。一个客户端程序在通信最后创建一个套接字并努力连接服务器套接字。
当连接建立时,服务器在通信结束时创建一个套接字对象。客户端和服务器现在可以通过从套接字读或者写来交流。
java.net.Socket类代表一个套接字,而且java.net.ServerSocket类为服务器程序提供了一种机制来监听客户端并和它们建立连接。
以下步骤发生在两台电脑使用套接字建立TCP连接时:
服务器实例化一个ServerSocket对象,指示通信将产生在哪个端口号;
服务器调用ServerSocket类的accept()方法。这个方法等待直到一个客户端在给定的端口上连接到服务器;
在服务器等待后,一个客户端实例化一个Socket对象,指定服务器名称和连接的端口号;
Socket类的构造函数努力将客户端连接到指定的服务器和端口号。如果通信建立,客户端现在就拥有了一个能和服务器通信的Socket对象;
在服务器端,accept()方法在服务器上返回一个连接到客户端套接字的新的套接字。
在连接建立后,通信可以使用I/O流产生。每个套接字都有一个输出流和一个输入流。客户端的输出流连接到服务器端的输入流,客户端的输入流连接到服务器端的输出流。
TCP是一个双向的通信协议,所以数据可以在两个流同时发送。由以下提供完整的方法的类来实现套接字。
1、ServerSocket类方法
java.net.ServerSocket类被服务器应用程序使用来获得一个端口和监听客户端请求。
ServerSocket类有四个构造函数:
方法描述public ServerSocket(int port) throws IOException 尝试创建一个连接到指定端口的服务器套接字。如果端口已经连接到另一个应用程序那么将产生一个异常。
public ServerSocket(int port, int backlog) throws IOException 和前一个构造函数相同,backlog参数指定了在等待队列中有多少传入的客户端要存储
public ServerSocket(int port, int backlog, InetAddress address) throws IOException 和前一个构造函数相同,InetAddress参数指定了本地捆绑的IP地址。InetAddress用于有多个IP地址的服务器,允许服务器指定它的哪个IP地址 来接收客户端请求。
public ServerSocket() throws IOException 创建一个为绑定服务器的套接字。当使用这个构造函数时,当准备好绑定服务器套接字时使用bind()方法。
如果ServerSocket的构造函数不抛出一个异常,这意味着应用程序已经成功地绑定到特定的端口并且准备好客户端的请求了。
这里是一些ServerSocket类的常见方法:
方法描述public int getLocalPort() 返回服务器套接字正在监听的端口。如果在构造函数中传入0作为端口号这个方法会是有用的,它会让服务器找一个端口。
public Socket accept() throws IOException 等待一个即将到来的客户端。这个方法直到或者一个客户端连接到特定端口服务器,或者套接字到时为止时阻塞,假设超时的值已经使用 setSoTimeout()方法设置了。否则,这个方法将无限期阻塞。
public void setSoTimeout(int timeout) 把超时的值设为服务器套接字在accept()内等待客户端的时间。
public void bind(SocketAddress host, int backlog) 将套接字绑定在特定的服务器和SocketAddress对象的端口上。如果使用无参数的构造函数实例化一个ServerSocket对象,使用这个方法。
当ServerSocket调用accept()方法直到一个客户端连接才返回。在一个客户端确实连接后,ServerSocket在一个未指定的端口上创建一个新的套接字,并返回一个新套接字的引用。一个TCP连接现在就存在于客户端和服务器间了,通信就可以开始了。
2、Socket类方法