-
菜鸟请教一个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
目前还没有答案
相关推荐
在本课程设计中,我们关注的是使用Java标准版(J2SE)开发一个数据库登录模块。J2SE是Java平台的核心部分,它提供了丰富的API和工具来构建桌面应用程序。在这个项目中,我们将学习如何利用J2SE的特性来实现用户登录...
4. **结果集处理**:对于查询操作,执行`executeQuery()`会返回一个`ResultSet`对象,包含了查询的结果。可以遍历这个结果集来获取数据。 5. **事务管理**:在J2SE中,可以手动开启、提交和回滚事务。事务的隔离...
在本项目中,我们关注的是一个使用Java标准版(J2SE)实现的计算器应用程序。这个计算器项目不仅提供了基本的计算功能,而且它的图形用户界面(GUI)设计得相当优美,使得用户交互体验良好。这对于那些正在学习Java ...
4. **多态性**:指一个类的行为可以通过继承和方法重写来实现动态的变化。这是面向对象编程的一个核心概念。 5. **扩展类**:Java中的类可以被其他类继承,从而复用代码和功能。 6. **抽象类与接口**: - **抽象...
这个聊天室项目是基于J2SE实现的一个交互式通信应用,让多个用户可以在同一平台上进行实时聊天。 【描述】"j2se桌面应用程序开发聊天室都来看共同分享"表明这个项目旨在展示如何使用Java SE技术构建一个桌面端的...
以下是一个J2SE服务器端的简单示例: ```java import java.net.ServerSocket; import java.net.Socket; public class J2SEServer { public static void main(String[] args) { try { ServerSocket serverSocket...
包含j2se基础 j2se桌面项目开发(坦克大战,贪吃蛇,聊天室)oricle数据库,JDBC操作和mysql, servert and jsp html,css and javascript 项目开发等等 你一生不容错过的java学习资源 链接地址:...
2. **类库**:J2SE提供了一系列丰富的类库,如`java.lang`、`java.util`、`java.io`等,它们涵盖了字符串处理、集合框架、输入/输出操作等方面。通过源代码,我们可以学习如何有效地利用这些类库来解决问题。 3. **...
"j2se基于socket通信的聊天室"是一个很好的学习实践项目,它能够帮助初学者理解如何使用Java标准版(J2SE)的Socket API进行基本的网络通信。在这个项目中,我们将探讨以下关键知识点: 1. **Socket概念**:Socket...
本项目基于Java技术和MySQL数据库,构建了一个完整的电话缴费系统,以满足日常运营中的缴费需求。下面将详细介绍该系统的相关知识点。 首先,Java是这个系统的主要开发语言,它是一种跨平台、面向对象的编程语言,...
J2SE_API、J2SE_API、J2SE_API、J2SE_API、J2SE_API、J2SE_API、J2SE_API
本资源“j2se6中文网页版”显然是一个中文版的J2SE 6 API文档,旨在帮助中国开发者更方便地理解和使用Java编程语言。 1. **Java API**:Java API是Java平台的核心,包含了大量预定义的类库,如集合框架、I/O流、...
《基于J2SE的图书管管理系统》是一款利用Java标准版(J2SE)技术平台开发的图书管理软件,旨在提供高效、便捷的...通过深入研究和实践,开发者不仅能掌握J2SE的基本用法,还能理解如何构建一个功能完善的桌面应用系统。
java课程设计大作业——用J2SE写的一个坦克大战小游戏java课程设计大作业——用J2SE写的一个坦克大战小游戏java课程设计大作业——用J2SE写的一个坦克大战小游戏java课程设计大作业——用J2SE写的一个坦克大战小游戏...
J2SE基础知识是每一个Java开发者必须掌握的核心技能。以下将详细阐述J2SE中的关键概念和技术。 1. **Java语言基础** - **语法**:包括变量声明、数据类型(基本类型和引用类型)、运算符、流程控制(如if语句、for...
Java 2 Platform, ...每个子文件可能对应一个特定的主题,例如,一个文件可能是关于集合框架的实现,另一个可能是多线程的示例。实践是检验理论的最好方式,希望这个项目能帮助你扎实地掌握Java的J2SE核心知识。
Java 2 Platform, Standard Edition(J2SE)是Java开发平台的一个重要组成部分,主要用于桌面应用和服务器端开发。中文版的J2SE API文档对于中国开发者来说尤其方便,它提供了全面的API参考,帮助理解并使用Java编程...
J2SE 6.0 版本是其历史上的一个重要里程碑,带来了许多性能优化、新特性和改进。在这个版本中,开发者可以享受到更高效、更易用的开发环境。 API(Application Programming Interface)是编程时使用的接口集合,它...
7. **Java API**:J2SE包含丰富的API库,如Swing和AWT用于构建图形用户界面,JDBC用于数据库连接,网络编程的Socket和ServerSocket等。熟悉这些API将极大地扩展你的编程能力。 8. **JVM和内存管理**:理解Java...
J2SE6.0是这个版本的一个里程碑,带来了许多改进和新特性,旨在提高开发者的效率和应用程序的性能。 帮助文档是学习任何技术的重要资源,对于J2SE6.0也不例外。该英文版帮助文档详细阐述了Java编程语言的语法、API...