packagecom.cn.gao;import java.net.*;import java.io.*;import com.mongodb.*;/*** 客户端发送消息给服务器
*@authorhadoop
**/
public classClient {privateSocket client;private booleanconnected;//客户端构造函数
public Client(String host,intport){try{
client= newSocket(host,port);
System.out.println("连接服务器成功!");this.connected = true;
}catch(UnknownHostException e) {
System.out.println("无法解析主机名!");this.connected = false;
}catch(IOException e) {
System.out.println("输入输出错误!");this.connected = false;
closeSocket();
}
}//判断是否连接
public booleanisConnected(){returnconnected;
}//设置连接状态
public void setConnected(booleanconnected){this.connected =connected;
}/*** 发送数据到端口
*@paramdbname mongodb数据库名字
*@paramcollectionName 该数据库中要发送数据的collection名*/
public voidsendFile(String dbname,String collectionName){
DataOutputStream dos= null;
DataInputStream dis= null;if(client==null) return;//从mongodb数据库中读取数据
Mongo connection = new Mongo("localhost:27017");
DB db=connection.getDB(dbname);
DBCollection input=db.getCollection(collectionName);/*BasicDBObject condition=new BasicDBObject();//条件
BasicDBObject key=new BasicDBObject("vtext",2);//指定需要显示列
DBCursor cur = input.find(condition,key);*/DBCursor cur=input.find();try{while(cur.hasNext()){
DBObject document=cur.next();
dis= new DataInputStream(newByteArrayInputStream(document.toString().getBytes()));
dos= newDataOutputStream(client.getOutputStream());int bufferSize = 10240;byte[] buf = new byte[bufferSize];int num =0;while((num=dis.read(buf))!=-1){
System.out.println(newString(buf));
dos.write(buf,0, num);
}
dos.flush();
}
System.out.println("传输成功!");
}catch(IOException e) {
e.printStackTrace();//System.out.println("输入输出错误!");
closeSocket();
}finally{try{if(dis!=null) dis.close();if(dos!=null) dos.close();
}catch(IOException e) {
e.printStackTrace();//System.out.println("输入输出错误!");
}
}
}//关闭客户端
public voidcloseSocket(){if(client!=null){try{
client.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}/***@paramargs
* 参数格式如下
* hostname dbname collectionName*/
public static voidmain(String[] args){//默认端口为8888
if(args.length!=3){
System.out.println("参数格式不对!");return;
}
String hostName= args[0];int port = 8888;
Client client= null;
client= newClient(hostName,port);
String dbname= args[1];
String collectionName= args[2];if(client.isConnected()){
client.sendFile(dbname, collectionName);
client.closeSocket();
}
}
}