-
菜鸟请教一个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
目前还没有答案
相关推荐
j2se数据库登陆模块课程设计,实现了登陆和管理员管理模块
J2SE的源代码练习(含数据库oracle)J2SE的源代码练习(含数据库oracle)
包含j2se基础 j2se桌面项目开发(坦克大战,贪吃蛇,聊天室)oricle数据库,JDBC操作和mysql, servert and jsp html,css and javascript 项目开发等等 你一生不容错过的java学习资源 链接地址:...
j2se的特征:如Applet和servlet的区别;多线程,重载,多态,扩展类,抽象类,接口问题,静态绑定与动态的区别等等
J2SE_API、J2SE_API、J2SE_API、J2SE_API、J2SE_API、J2SE_API、J2SE_API
最简单J2ME与J2SE的SOCKET链接例子 其中Parser是私有协议解析类Protol是构造私有协议类
J2SE基础知识大全 J2SE基础知识大全 J2SE基础知识大全
J2SE基础源代码
J2SE课件J2SE课件J2SE课件J2SE课件J2SE课件J2SE课件
j2se1.5中文api
我们将编写一个简单的Java Application程序,并编译并运行该程序。 (4)编写并编译一个Java Applet程序 我们将编写一个简单的Java Applet程序,并编译该程序。 (5)编写配合Applet的HTML文件 我们将编写一个...
j2se doc 中文版 j2se doc 中文版 j2se doc 中文版 j2se doc 中文版
J2SE中表格应用,一个JTable的例子。
j2se桌面应用程序开发聊天室都来看共同分享
很好的j2se的API
是图形界面的完美应用,对于初学者有不可错过的好处,代码思路清晰,功能完整,界面精美
J2SE桌面应用开发 J2SE桌面应用开发J2SE桌面应用开发 J2SE桌面应用开发 J2SE桌面应用开发
J2SE 教程
j2se api 中文版 j2se api 中文版 j2se api 中文版
此项目为一个汽车的零售件查询系统,里面采用j2se swing编程,和sql2000数据库。