先来看看客户段程序编写的流程:
1、 首先调用Socket类的构造函数,以服务器的指定的IP地址或指定的主机名和指定的端口号为参数,创建一个Socket流,在创建Socket流的过程中包含了向服务器请求建立通讯连接的过程实现。
2、 建立了客户端通讯Socket后。就可以使用Socket的方法getInputStream()和getOutputStream()来创建输入/输出流。这样,使用Socket类后,网络输入输出也转化为使用流对象的过程。
3、 使用输入输出流对象的相应方法读写字节流数据,因为流连接着通讯所用的Socket,Socket又是和服务器端建立连接的一个端点,因此数据将通过连接从服务器得到或发向服务器。这时我们就可以对字节流数据按客户端和服务器之间的协议进行处理,完成双方的通讯任务。
4、 待通讯任务完毕后,我们用流对象的close()方法来关闭用于网络通讯的输入输出流,在用Socket对象的close()方法来关闭Socket。
下面,我想通过一个简单的例子来进一步介绍一下客户端程序的编写
代码一:
import java.io.*;
import java.net.*;
public class SocketCommunicationClient
{
public static void main(String[] args)
{
try{
Socket clientSocket =new Socket ("mice",9000);//创建一个流Socket并与主机mice上的端口
9000相连接
OutputStream output =clientSocket.getOutputStream();//向此Socket写入字节的一个输出流
DataInputStream input=new DataInputStream(clientSocket.getInputStream());
file://创建新的数据输入流以便从指定的输入流中读出数据
int c;
String response;
while (( c= System.in.read())!=-1)//从屏幕上接受输入的字符串,并且分解成一个个字符
{
output.write((byte)c);
if(c=='/n')//如果字符为回车,则输出字符串缓冲
{
output.flush();
response=input.readLine();
System.out.println("Communication:"+response);
}
}
output.close();
input.close();
clientSocket.close();
} catch (Exception e){
System.err.println("Exception :"+e);
}
}
}
这个程序是一个非常的简单的数据通讯的例子,程序先创建了一个Socket并和主机mice上的端口9000相连
接,然后打开输入输出流,接着程序从标准输入接收字符并写入流中,每写满一行(以用户键入回车为标
志),就把缓冲区中的字符串送往mice上的服务器端程序进行处理,等待服务器端的应答。
input.readLine()方法调用将导致程序停滞直到收到应答信息,程序将一直重复这个过程,直到用户输入
中止符。最后程序要关闭socket输入输出流,在关闭socket和服务器端的连接。