使用ServletSocket创建TCP服务器端
从图中看上去TCP通信的两个通信实体之间并没有服务器端客户端之分但那是两个通信实体已经建立虚拟链路之后的示意图在两个通信实体没有建立虚拟链路之前必须有一个通信实体先做出主动姿态主动接收来自其他通信实体的连接请求
Java中能接受其他通信实体连接请求的类是ServerSocketServerSocket对象用于监听来自客户端的Socket连接如果没有连接它将一直处于等待状态ServerSocket包含一个监听来自客户端连接请求的方法
Socket accept()如果接收到一个客户端Socket的连接请求该方法将返回一个与客户端Socket对应的Socket(如图所示每个TCP连接有两个Socket)否则该方法将一直处于等待状态线程也被阻塞
为了创建ServerSocket对象ServerSocket类提供了如下几个构造器
ServerSocket(int port)用指定的端口port来创建一个ServerSocket该端口应该是有一个有效的端口整数值~
ServerSocket(int portint backlog)增加一个用来改变连接队列长度的参数backlog
ServerSocket(int portint backlogInetAddress localAddr)在机器存在多个 IP地址的情况下允许通过localAddr这个参数来指定将ServerSocket绑定到指定的IP地址
当ServerSocket使用完毕应使用ServerSocket的close()方法来关闭该ServerSocket通常情况下服务器不应该只接受一个客户端请求而应该不断地接受来自客户端的所有请求所以Java程序通常会通过循环不断地调用ServerSocket的accept()方法如下代码片段所示
//创建一个ServerSocket用于监听客户端Socket的连接请求
ServerSocket ss = new ServerSocket()
//采用循环不断接受来自客户端的请求
while (true)
{
//每当接受到客户端Socket的请求服务器端也对应产生一个Socket
Socket s = ssaccept()
//下面就可以使用Socket进行通信了
…
}
上面程序中创建ServerSocket没有指定IP地址则该ServerSocket将会绑定到本机默认的IP地址程序中使用作为该ServerSocket的端口号通常推荐使用以上的端口主要是为了避免与其他应用程序的通用端口沖突
返回目录疯狂Java讲义
编辑推荐
Java程序性能优化让你的Java程序更快更稳定
新手学Java 编程
Java程序设计培训视频教程