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
目前还没有答案

相关推荐

    j2se数据库登陆模块课程设计

    在本课程设计中,我们关注的是使用Java标准版(J2SE)开发一个数据库登录模块。J2SE是Java平台的核心部分,它提供了丰富的API和工具来构建桌面应用程序。在这个项目中,我们将学习如何利用J2SE的特性来实现用户登录...

    J2SE的源代码练习(含数据库oracle)

    4. **结果集处理**:对于查询操作,执行`executeQuery()`会返回一个`ResultSet`对象,包含了查询的结果。可以遍历这个结果集来获取数据。 5. **事务管理**:在J2SE中,可以手动开启、提交和回滚事务。事务的隔离...

    j2se实现计算器,界面优美

    在本项目中,我们关注的是一个使用Java标准版(J2SE)实现的计算器应用程序。这个计算器项目不仅提供了基本的计算功能,而且它的图形用户界面(GUI)设计得相当优美,使得用户交互体验良好。这对于那些正在学习Java ...

    学习j2se的30个问题

    4. **多态性**:指一个类的行为可以通过继承和方法重写来实现动态的变化。这是面向对象编程的一个核心概念。 5. **扩展类**:Java中的类可以被其他类继承,从而复用代码和功能。 6. **抽象类与接口**: - **抽象...

    j2se聊天室(无需资源分)

    这个聊天室项目是基于J2SE实现的一个交互式通信应用,让多个用户可以在同一平台上进行实时聊天。 【描述】"j2se桌面应用程序开发聊天室都来看共同分享"表明这个项目旨在展示如何使用Java SE技术构建一个桌面端的...

    最简单J2ME与J2SE的SOCKET链接例子,一看就懂

    以下是一个J2SE服务器端的简单示例: ```java import java.net.ServerSocket; import java.net.Socket; public class J2SEServer { public static void main(String[] args) { try { ServerSocket serverSocket...

    j2se桌面项目开发

    包含j2se基础 j2se桌面项目开发(坦克大战,贪吃蛇,聊天室)oricle数据库,JDBC操作和mysql, servert and jsp html,css and javascript 项目开发等等 你一生不容错过的java学习资源 链接地址:...

    J2SE基础源代码

    2. **类库**:J2SE提供了一系列丰富的类库,如`java.lang`、`java.util`、`java.io`等,它们涵盖了字符串处理、集合框架、输入/输出操作等方面。通过源代码,我们可以学习如何有效地利用这些类库来解决问题。 3. **...

    j2se基于socket通信的聊天室

    "j2se基于socket通信的聊天室"是一个很好的学习实践项目,它能够帮助初学者理解如何使用Java标准版(J2SE)的Socket API进行基本的网络通信。在这个项目中,我们将探讨以下关键知识点: 1. **Socket概念**:Socket...

    电话缴费系统 j2se mysql数据库

    本项目基于Java技术和MySQL数据库,构建了一个完整的电话缴费系统,以满足日常运营中的缴费需求。下面将详细介绍该系统的相关知识点。 首先,Java是这个系统的主要开发语言,它是一种跨平台、面向对象的编程语言,...

    J2SE_API J2SE_API

    J2SE_API、J2SE_API、J2SE_API、J2SE_API、J2SE_API、J2SE_API、J2SE_API

    j2se6中文网页版

    本资源“j2se6中文网页版”显然是一个中文版的J2SE 6 API文档,旨在帮助中国开发者更方便地理解和使用Java编程语言。 1. **Java API**:Java API是Java平台的核心,包含了大量预定义的类库,如集合框架、I/O流、...

    基于J2SE的图书管管理系统

    《基于J2SE的图书管管理系统》是一款利用Java标准版(J2SE)技术平台开发的图书管理软件,旨在提供高效、便捷的...通过深入研究和实践,开发者不仅能掌握J2SE的基本用法,还能理解如何构建一个功能完善的桌面应用系统。

    java课程设计大作业-用J2SE写的一个坦克大战小游戏

    java课程设计大作业——用J2SE写的一个坦克大战小游戏java课程设计大作业——用J2SE写的一个坦克大战小游戏java课程设计大作业——用J2SE写的一个坦克大战小游戏java课程设计大作业——用J2SE写的一个坦克大战小游戏...

    J2SE基础知识大全

    J2SE基础知识是每一个Java开发者必须掌握的核心技能。以下将详细阐述J2SE中的关键概念和技术。 1. **Java语言基础** - **语法**:包括变量声明、数据类型(基本类型和引用类型)、运算符、流程控制(如if语句、for...

    j2se练习小程序

    Java 2 Platform, ...每个子文件可能对应一个特定的主题,例如,一个文件可能是关于集合框架的实现,另一个可能是多线程的示例。实践是检验理论的最好方式,希望这个项目能帮助你扎实地掌握Java的J2SE核心知识。

    j2se_中文版

    Java 2 Platform, Standard Edition(J2SE)是Java开发平台的一个重要组成部分,主要用于桌面应用和服务器端开发。中文版的J2SE API文档对于中国开发者来说尤其方便,它提供了全面的API参考,帮助理解并使用Java编程...

    j2se中文6.0api

    J2SE 6.0 版本是其历史上的一个重要里程碑,带来了许多性能优化、新特性和改进。在这个版本中,开发者可以享受到更高效、更易用的开发环境。 API(Application Programming Interface)是编程时使用的接口集合,它...

    J2SE学习入门教程

    7. **Java API**:J2SE包含丰富的API库,如Swing和AWT用于构建图形用户界面,JDBC用于数据库连接,网络编程的Socket和ServerSocket等。熟悉这些API将极大地扩展你的编程能力。 8. **JVM和内存管理**:理解Java...

    J2SE帮助文档

    J2SE6.0是这个版本的一个里程碑,带来了许多改进和新特性,旨在提高开发者的效率和应用程序的性能。 帮助文档是学习任何技术的重要资源,对于J2SE6.0也不例外。该英文版帮助文档详细阐述了Java编程语言的语法、API...

Global site tag (gtag.js) - Google Analytics