package factory;
import java.awt.Color;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class MsServer extends Thread{
BufferedReader in;
PrintWriter out;
ServerSocket serverSocket;
Socket newSocket;
PersonBean bean = new PersonBean();
ArrayList<Object> list = new ArrayList<Object>();//数据库获取的数据存放到该list中
ResultSet result;//结果集
ObjectInputStream is = null;
ObjectOutputStream os =null;
public MsServer(){
try{
serverSocket=new ServerSocket(7777);
while(true){
System.out.println("等待客户端...");
newSocket=serverSocket.accept();
System.out.println("连接成功");
new Thread(new Runnable() {//实现多线程...死亡的线程再用start的话就IllegalThreadStateException
@Override
public void run() {
// TODO Auto-generated method stub
//startserver();
//readliu();//先判断是否是谁发出的请求
run1();
}
}).start();
}
}catch(Exception e){System.out.println(e); }
System.out.println("》ChatClient被new");
//new ChatClient();
System.out.println("》》ChatClient被new");
}
public void run1(){
String msg="";
try{
in = new BufferedReader(new InputStreamReader(newSocket.getInputStream()));
out = new PrintWriter(newSocket.getOutputStream(),true);
}catch(Exception e){
}
while(true){
try{
msg=in.readLine();
System.out.println("run3");
}catch(SocketException e){
System.out.println(e);
break;
}catch(Exception e){
System.out.println(e);
}
//判断是否是Node14Panel发的请求
if(msg.equals("All")){
System.out.println("All发出的请求");
startserver();
}
else if(msg.equals("Add")){
System.out.println("Add发出的请求");
add();
}
else if(msg.equals("Check")){
System.out.println("Check发出的请求");
check();
}
}
System.out.println(msg);
}
//判断是谁发送的请求,执行相对应的操作
void readliu(){
String msg = "";
System.out.println("开始读取流");
try{
in = new BufferedReader(new InputStreamReader(newSocket.getInputStream()));
out = new PrintWriter(newSocket.getOutputStream(),true);
System.out.println("定义in变量完成");
msg = in.readLine();
System.out.println("开始读取流");
//in.close();
System.out.println("in流关闭");
}catch(IOException e){
System.out.println(e);
}catch(Exception e){
System.out.println(e);
}
//判断是否是Node14Panel发的请求
if(msg.equals("All")){
System.out.println("All发出的请求");
startserver();
}
else if(msg.equals("Add")){
System.out.println("Add发出的请求");
add();
}
else if(msg.equals("Check")){
System.out.println("Check发出的请求");
check();
}
}
//给客户端发送信息
public void sendMsg(String msg){
try{
out.println(msg);
}catch(Exception e){
System.out.println(e);
}
}
//读取对象流
void startserver(){
try{
sendMsg("Obj");//给客户端发送信息,解释这是对象
sendMsg("test");
os = new ObjectOutputStream(newSocket.getOutputStream());
//searchAll();//查询所有的数据
System.out.println("成功给客户端发送Obj信息");
for(int i=0;i<list.size();i++){
os.writeObject(list.get(i));
}
os.writeObject(null);//添加表示对象已输完
os.flush();
System.out.println("Obj传输完成");
}catch(IOException e){
System.out.println(e);
}catch(Exception e){
System.out.println(e);
}
}
//把所有数据发到客户端
public void sendAll(){
try{
for(int i=0;i<list.size();i++){
os.writeObject(list.get(i));
}
}catch(Exception e){
System.out.println(e);
}
}
//查询所有的数据
///获取所有的数据存放到list中
public void searchAll(){
String sql = "";
Database DB = new Database();//连接数据库
sql = "SELECT SNO,SNAME,SEX,AGE,CNO,PNO,PNUM,BSALARY FROM staff";
System.out.println("searchAll被调用");
try{
System.out.println("DB被调用");
DB.Conn();
System.out.println("DB完");
result = DB.executeQuery(sql);//执行sql语句并返回结果
System.out.println("result完");
while(result.next()){
Person person = new Person();//临时对象
person.setPersonID(result.getString("SNO"));
person.setName(result.getString("SNAME"));
person.setSex(result.getString("SEX"));
person.setAge(result.getInt("AGE"));
person.setCno(result.getString("CNO"));
person.setPno(result.getString("PNO"));
person.setPnum(result.getInt("PNUM"));
person.setSalary(result.getString("BSALARY"));
System.out.println("SNO: "+person.getPersonID()+" SNO: "+person.getName()+
" SEX:"+person.getSex()+" AGE:"+person.getAge()+" CNO:"+person.getCno()+
" PNO:"+person.getPno()+" PNUM:"+person.getPnum()+" Salary:"+person.getSalary());
list.add(person);//存放数据到list中
os.writeObject(person);//写入序列化的对象
os.flush();
}
}catch(Exception e){
System.out.println(e);
}
finally{
DB.closeStmt();//关闭声明
DB.closeConn();//关闭链接对象
}
}
}
客户端:
package com.msclient;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import factory.Person;
//用来发送请求给服务器端
public class PersonBean extends Thread{
String sql;
List<Object> list = new ArrayList<Object>();
String field1; //SNO
String field2; //SNAME
String field3; //SEX
String field4; //AGE
String field5; //CNO;
String field6; //PNO;
int pnum = 0; //PNUM
String salary="0"; //BSALARY
//读取数据
ObjectInputStream is = null;
ObjectOutputStream os =null;
Socket socket;
private BufferedReader reader;
private PrintWriter writer;
ArrayList<Object> listvalue = new ArrayList<Object>();//保存信息的list
public PersonBean(){
linkserver();//连接服务器
start();//启动线程
}
public void linkserver(){
//与服务端连接
try{
System.out.println("linkserver被调用");
socket = new Socket("127.0.0.1", 7777);
writer = new PrintWriter(socket.getOutputStream(),true);
System.out.println("成功连接到服务器");
//reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}catch(Exception e){
System.out.println(e);
}
}
//线程,用来监听服务器发送过来的信息
public void run(){
String msg="";
//BufferedReader reader;
while(true){
try{
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
msg=reader.readLine();
System.out.println("run3");
}catch(SocketException e){
System.out.println(e);
break;
}catch(Exception e){
System.out.println(e);
}
System.out.println(">>" + msg );
if(msg!=null&&msg!=""){
System.out.println(">>" + msg );
}
if(msg.equals("Obj")){
System.out.println(">>" + msg );
}
}
System.out.println(msg);
}
//获取服务端的信息
public ArrayList<Object> seek(){
//获取服务器发来的信息
System.out.println("seek()被调用");
try{
System.out.println("is出问题");
is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
System.out.println("is没问题");
while(true){
try{
Person person = (Person)is.readObject();
if(person==null) break;
listvalue.add(person);//获取的信息存放到listvalue集合中
}catch(ClassNotFoundException e){
System.out.println(e);
break;
}catch(Exception e){
System.out.println(e);
break;
}
}
System.out.println("对象输完");
}catch(Exception e){System.out.println(e);}
for(int i=0;i<listvalue.size();i++){
Person person = (Person)listvalue.get(i);
System.out.println("SNO: "+person.getPersonID()+" SNO: "+person.getName()+
" SEX:"+person.getSex()+" AGE:"+person.getAge()+" CNO:"+person.getCno()+
" PNO:"+person.getPno()+" PNUM:"+person.getPnum()+" Salary:"+person.getSalary());
}
System.out.println("seek()查询完成");
return listvalue;//返回集合
}
public ArrayList<Object> seek1(){
return listvalue;
}
}