当客户程序需要与服务器程序通讯的时候
客户程序在客户机创建一个socket对象
Socket类有几个构造函数
两个常用的构造函数是 Socket(InetAddress addr
int port) 和 Socket(String host
int port)
两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字
对于第一个InetAddress子类对象通过addr参数获得服务器主机的IP地址
对于第二个函数host参数包被分配到InetAddress对象中
如果没有IP地址与host参数相一致
那么将抛出UnknownHostException异常对象
两个函数都通过参数port获得服务器的端口号
假设已经建立连接了
网络API将在客户端基于Socket的流套接字中捆绑客户程序的IP地址和任意一个端口号
否则两个函数都会抛出一个IOException对象
如果创建了一个Socket对象那么它可能通过调用Socket的 getInputStream()方法从服务程序获得输入流读传送来的信息也可能通过调用Socket的 getOutputStream()方法获得输出流来发送消息在读写活动完成之后客户程序调用close()方法关闭流和流套接字下面的代码创建了一个服务程序主机地址为端口号为的Socket对象然后从这个新创建的Socket对象中读取输入流然后再关闭流和Socket对象
Socket s = new Socket ( );
InputStream is = sgetInputStream ();
// Read from the stream
isclose ();
sclose ();
接下面我们将示范一个流套接字的客户程序这个程序将创建一个Socket对象Socket将访问运行在指定主机端口上的服务程序如果访问成功客户程序将给服务程序发送一系列命令并打印服务程序的响应List使我们创建的程序SSClient的源代码
Listing : SSClientjava
// SSClientjava
import javaio*;
import javanet*;
class SSClient
{public static void main (String [] args)
{String host = localhost;
// If user specifies a commandline argument that argument
// represents the host name
if (argslength == )
host = args [];
BufferedReader br = null;
PrintWriter pw = null;
Socket s = null;
try
{// Create a socket that attempts to connect to the server
// program on the host at port
s = new Socket (host );
// Create an input stream reader that chains to the socket´s
// byteoriented input stream The input stream reader
// converts bytes read from the socket to characters The
// conversion is based on the platform´s default character
// set
InputStreamReader isr;
[] [] []