0 0

菜鸟请教一个socket问题,J2SE方面的,无窗口无数据库。0

服务端需要做两件事情,一个是验证用户登陆(客户端传来的是user对象,服务端需要返回相应权限选择),一个是处理用户的增删改查请求(返回的结果是一个List对象)。
现在问题是,服务端在返回权限之后,socket就关闭了,不能处理下面的增删改查业务。
我试过把监听写成死循环,但是这样写,所有的IO流和业务代码都要写在socket初始化这个方法里面了,我是想把socket初始化、用户验证、每个业务请求所对应的处理都写在不同的方法体里,然后在main方法里调用,不知道该怎么去解决,想到过多线程,但是多线程的话,所有的方法也是写在run()里的,不知道是不是这样设计。个人觉得不需要多线程,因为是单机运行。
求解决方法,不好意思,代码有点多了,大家看看我哪里需要改的,我也不知道哪里写错了。。

 

贴出代码:

clientmain:

package shop_client;
import java.io.IOException;
import shop_entity.ShopUser;
import shop_server.Socket_Server;
public class ClientMain {
	static ShopUser su = null;
	public static void main(String[] args) throws IOException, ClassNotFoundException {
		Socket_Client sc = new Socket_Client();
		sc.clientInit();
		sc.sendLogin();
		while(true){
			String loginInfo=sc.getLogin();
		Socket_Server ss = new Socket_Server();	
			if(loginInfo.equals(ss.showManager()))
			{
				String substr1 = loginInfo.substring(0,17);
				String substr2 = loginInfo.substring(18,61);
				System.out.println(substr1);
				System.out.println(substr2);
				sc.ManagerChoice();
			}else if(loginInfo.equals(ss.showSale()))
			{
				String substr1 = loginInfo.substring(0,17);
				String substr2 = loginInfo.substring(18,50);
				System.out.println(substr1);
				System.out.println(substr2);
				sc.SaleChoice();
			}else if(loginInfo.equals("登陆失败,系统自动退出!"))
			{
				System.out.println("登陆失败,系统自动退出,请重新运行!");
				System.exit(0);
			}		
		}
		
	}

}

 

 

socket_client

package shop_client;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import shop_entity.ShopGoods;
import shop_entity.ShopUser;
public class Socket_Client {
	static ShopGoods sg;
	static ShopUser su;
	private Socket s;
	ArrayList<ShopGoods> goodsData = new ArrayList<ShopGoods>();
		//初始化socket	
		public void clientInit()
		{
			try {
				s = new Socket("127.0.0.1",8090);
			} catch (UnknownHostException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}	
		//商品列表
		public void getGoodsTable() throws IOException, ClassNotFoundException
		{
			ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
			System.out.println("商品编号"+"\t"+"商品名称"+"\t"+
					"商品单位"+"\t"+"商品价格"+"\t"+"商品数量");
			ShopGoods sg =(ShopGoods)ois.readObject();
			System.out.println(sg.getGid()+sg.getGname()+
					sg.getGmean()+sg.getGprice()+sg.getGprice());
		}	
		//登陆提示信息
		public void showWelcome()
		{
		System.out.println("===================");
		System.out.println("欢迎进入青鸟超市系统");
		System.out.println("===================");
		}
		//将键盘输入的内容传入服务端
		public void sendLogin() throws IOException
		{
			showWelcome();
			//用户输入
			InputStreamReader isri = new InputStreamReader(System.in);
			BufferedReader br1 = new BufferedReader(isri);
			System.out.println("请输入帐号:");
			String name = br1.readLine();
			System.out.println("请输入密码:");
			String password = br1.readLine();
			//保存输入,并写入服务端
			su = new ShopUser(name,password);
			ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
			oos.writeObject(su);
		}
		//从服务端获得判断后的结果
		public String getLogin() throws IOException
		{
		InputStreamReader isrs = new InputStreamReader(s.getInputStream());
		BufferedReader br2 = new BufferedReader(isrs);
		String loginInfo=br2.readLine();
		return loginInfo;
		}
		//从键盘获得管理员操作选择并传入客户端,并将服务端传过来的集合返回到控制台
		public void ManagerChoice() throws IOException, ClassNotFoundException
		{
			//管理员指令传输
			InputStreamReader isr = new InputStreamReader(System.in);
			BufferedReader br = new BufferedReader(isr);
			String choice = br.readLine();
			OutputStreamWriter osw = new OutputStreamWriter(s.getOutputStream());
			BufferedWriter bw  = new BufferedWriter(osw);	
			bw.write(choice+"\n");

			if(choice.equals("1"))
			{
				
			}else if (choice.equals("2"))
			{
				
			}else if (choice.equals("3"))
			{
				
			}else if (choice.equals("4"))
			{
				getGoodsTable();
			}else if (choice.equals("5"))
			{
				
			}else if (choice.equals("6"))
			{
				
			}else
			{
				
			}
			
			
		}
		//从键盘获得收银员操作选择并传入服务端,并将服务端传过来的集合返回到控制台
		public void SaleChoice() throws IOException
		{
			//req
			InputStreamReader isr = new InputStreamReader(System.in);
			BufferedReader br = new BufferedReader(isr);
			String choice = br.readLine();
			OutputStreamWriter osw = new OutputStreamWriter(s.getOutputStream());
			BufferedWriter bw  = new BufferedWriter(osw);	
			bw.write(choice+"n");
			//res
			
		}
		
}

 

serverMain

package shop_server;
import java.io.IOException;
public class ServerMain{	
	public static void main(String[] args) throws IOException, ClassNotFoundException {
		Socket_Server socketserver = new Socket_Server();
		socketserver.serverInit();
	}
}

 

 

sock_server

 

package shop_server;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import shop_entity.ShopGoods;
import shop_entity.ShopUser;
public class Socket_Server{
	ShopUser su =null;
	static ShopGoods sg = null;
	private ServerSocket ss;
	private Socket s;
	static List<ShopGoods> goodsData ;
	ObjectInputStream ois;
	ObjectOutputStream oos;
	int getManagerChoice;
	BufferedReader br;
	InputStreamReader isr;
	//初始化server
	public void serverInit() throws IOException, ClassNotFoundException
	{
		ss =new ServerSocket(8090);
		s = new Socket();
		System.out.println("服务端已经启动");
		while(true){
		s = ss.accept();
		ois = new ObjectInputStream(s.getInputStream());	
		userLoginJudge();
		oos = new ObjectOutputStream( s.getOutputStream());
		isr = new InputStreamReader(s.getInputStream());
  		br = new BufferedReader(isr);
		getManagerChoice =Integer.parseInt( br.readLine());
		managerJudge();
		}
	}
	//显示管理员权限
	public String showManager()
	{
		String a = "您好!您是管理员,请选择您要的操作:"; 
		String b ="1.商品入库"+" "+"2.商品出库"+
		"  "+"3.添加商品"+"  "+"4.查询全部"+"  "+"5.查询单品"+"  "+"6.退出";
		return a+b;
	}
	//显示收银权限	
	public String showSale()
	{
		String a = "您好!您是收银员,请选择您要的操作:";
		String b = "1.扫描商品"+" "+"2.修改数量"+
		" "+"3.普通结账"+" "+"4.会员结账"+" "+"5.退出";
		return a+b;
	}
	//用户判断
	public void userLoginJudge() throws IOException, ClassNotFoundException
	{	
		ShopUser su = (ShopUser)ois.readObject();
		BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(s.getOutputStream()));
		 while(true){		
			if(su.getName().equals("gly") && su.getPassword().equals("123"))
			{
				  bw.write(showManager()+"\n");	
				
			}else if(su.getName().equals("syy") && su.getPassword().equals("456"))
			{
                  bw.write(showSale()+"\n");
                  
			}else
			{
				  bw.write("登陆失败,系统自动退出!\n");
			}
		 }
	}
	/******初始化商品信息********/
  static{
	  	 goodsData = new ArrayList<ShopGoods>();
		 ShopGoods sg1 = new ShopGoods(1001,"樱桃小丸子","本",20.0,100);
		 ShopGoods sg2 = new ShopGoods(1002,"名侦探柯南","本",25.4,50);
		 ShopGoods sg3 = new ShopGoods(1003,"清风抽纸巾","盒",4.5,90);
		 ShopGoods sg4 = new ShopGoods(1004,"康师傅桶面","桶",3.2,160);
		 ShopGoods sg5 = new ShopGoods(1005,"晨光水彩笔","根",1.5,120);
		 ShopGoods sg6 = new ShopGoods(1006,"蓝莓味益达","瓶",8.5,200);
		 ShopGoods sg7 = new ShopGoods(1007,"蒙牛冰淇淋","盒",20.6,40);
		 goodsData.add(sg1);
		 goodsData.add(sg2);
		 goodsData.add(sg3);
		 goodsData.add(sg4);
		 goodsData.add(sg5);
		 goodsData.add(sg6);
		 goodsData.add(sg7);
	 }
  /****************管理员操作******************************/
  	public void managerJudge() throws IOException
  	{
  		//获取客户端传来的管理员指令
		//判断,返回结果集
			switch(getManagerChoice)
			{
			case 1:
			
				break;
			case 2:
			
				break;
			case 3:
				
				break;
			case 4:
				showAll();
				break;
			case 5:
				
				break;
			case 6:
				
				break;
			default:
				
				break;
				
			}
  	}
		/**各种商品操作**/
		//商品入库
		public void addByGid(int gid ,int gnum){}
		//商品出库
		public void deleByGid(int gid){}
		//新增商品
		public void addGoods(ShopGoods shopgoods){}
		//查询全部商品
		public void showAll() throws IOException
		{
			//遍历集合
			for(int i = 0 ; i< goodsData.size(); i++)
			{
				ShopGoods sg = goodsData.get(i);

				oos.writeObject(sg); 
			}
		}
		//按编号查询单品
		public void showById(int gid){}
		//修改购买数量
		public void updateNumById(int gid , int num){}
		//普通结账
		public void normalCheck(){}
		//会员结账
		public void vipCheck(){}
	
		//退出提示信息
		public void showExit()
		{
		
		}

	
	
}

 

ShopGoods

package shop_entity;

import java.io.Serializable;

/*
 * 此类是定义商品属性
 * */
public class ShopGoods implements Serializable {
	private int gid;
	private String gname;
	private double gprice;
	private String gmean;
	private int gnum;
	public ShopGoods(int gid,String gname,String gmean,double gprise,int gnum)
	{
		this.gid = gid;
		this.gname =gname;
		this.gprice = gprise;
		this.gmean = gmean;
		this.gnum = gnum;
	}
	public int getGid() {
		return gid;
	}
	public void setGid(int gid) {
		this.gid = gid;
	}
	public String getGname() {
		return gname;
	}
	public void setGname(String gname) {
		this.gname = gname;
	}
	public double getGprice() {
		return gprice;
	}
	public void setGprice(double gprice) {
		this.gprice = gprice;
	}
	public String getGmean() {
		return gmean;
	}
	public void setGmean(String gmean) {
		this.gmean = gmean;
	}
	public int getGnum() {
		return gnum;
	}
	public void setGnum(int gnum) {
		this.gnum = gnum;
	}


}

 

 

ShopUser

package shop_entity;

import java.io.Serializable;

public class ShopUser  implements Serializable {
	private String name;
	private String password;
    public ShopUser(String name,String password)
    {
    	this.name = name;
    	this.password = password;
    }
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
    

}

 

2012年7月21日 10:19
目前还没有答案

相关推荐

Global site tag (gtag.js) - Google Analytics