读书人

javaSE的登陆验证有关问题,小弟我不知

发布时间: 2012-07-31 12:33:46 作者: rapoo

javaSE的登陆验证问题,我不知道错哪了。
没界面、没数据库,主要是用Socket和IO,main方法里调用,验证不成功,求指教

ClientCode

[code=Java]
package shop_client;
import java.io.BufferedOutputStream;
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 shop_entity.ShopUser;
import shop_server.Socket_Server;
public class Socket_Client {
Socket s =null;
String flag =null ;
ShopUser su = null;

InputStreamReader isr = null;
OutputStreamWriter osw = null;

BufferedReader br = null;
BufferedWriter bw= null;

BufferedOutputStream bos = null;
ObjectInputStream ois =null;
ObjectOutputStream oos =null;
//初始化客户端socket信息
public void clientinit()
{
try{
s = new Socket( "127.0.0.1 ",8099);
}catch(Exception ex)
{
ex.printStackTrace();
}
}
//从键盘获得输入(Io流方式)
public void getKeyboard()
{
isr = new InputStreamReader(System.in);
br = new BufferedReader(isr);
try {
flag = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
}
//登陆提示信息
public void showWelcome()
{
System.out.println( "=================== ");
System.out.println( "欢迎进入xxx超市系统 ");
System.out.println( "=================== ");
}
//登陆方法
public void userLogin() throws IOException
{
//接收控制台输入
isr = new InputStreamReader(System.in);
br = new BufferedReader(isr);
System.out.println( "请输入帐号: ");
String name = br.readLine();
System.out.println( "请输入密码: ");
String password = br.readLine();
//将控制台输入的帐号密码保存,并传入服务端
bos = new BufferedOutputStream(s.getOutputStream());
oos = new ObjectOutputStream(bos);
su = new ShopUser(name,password);
oos.writeObject(su);
oos.flush();
}
//判断登陆
public void clientuserJudge() throws IOException
{
isr = new InputStreamReader(s.getInputStream());
br = new BufferedReader(isr);
String loginInfo =null;
Socket_Server ss = new Socket_Server();
while((loginInfo=br.readLine())!=null) [color=#FF0000]//****好像就是这里出错了****//[/color]{

if(loginInfo.equals(ss.showManager()))
{
System.out.println(loginInfo);
getKeyboard();
}else if(loginInfo.equals(ss.showSale()))
{
System.out.println(loginInfo);
getKeyboard();
}else if(loginInfo.equals( "登陆失败,请重新输入 "))
{
System.out.println(loginInfo);
userLogin();


}
}
}

}

[/code]

ServerCode

[code=Java]
package shop_server;
import java.io.BufferedInputStream;
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 shop_entity.ShopGoods;
import shop_entity.ShopUser;

public class Socket_Server {
ServerSocket ss = null;
Socket s =null;
ShopUser su;

BufferedWriter bw = null;
BufferedReader br = null;

InputStreamReader isr = null;
OutputStreamWriter osw= null;

BufferedInputStream bis = null;
ObjectInputStream ois =null;
ObjectOutputStream oos = null;
//初始化服务端socket信息
public void serverinit(){
try{
ss =new ServerSocket(8099);
s = new Socket();
System.out.println( "服务端已经启动 ");
while(true){
ss.accept();
}
}catch(Exception ex)
{
ex.printStackTrace();
}

}
public void serveruserJudge() throws IOException, ClassNotFoundException
{
bis = new BufferedInputStream(s.getInputStream());
ois = new ObjectInputStream(bis);
su = (ShopUser)ois.readObject();

osw = new OutputStreamWriter(s.getOutputStream());
bw = new BufferedWriter(osw);
while(su!=null)
{
if(su.getName().equals( "gly ") && su.getPassword().equals( "123 "))
{
bw.write(this.showManager());
}else if(su.getName().equals( "syy ") && su.getPassword().equals( "456 "))
{
bw.write(this.showSale());
}else
{
bw.write( "登陆失败,请重新输入 ");
}
}
}

//显示管理员权限
public String showManager()
{
String a = "你好!您是管理员,请选择您要的操作: ";
String b = "1.商品入库 "+ " 2.商品出库 "+
" 3.添加商品 "+ " 4.查询全部 "+ " 5.查询单品 "+ " 6.退出 ";
return a+b+ "\t ";
}
//显示收银权限
public String showSale()
{
String a = "你好!您是收银员,请选择您要的操作: ";
String b = "1.扫描商品 "+ " 2.修改数量 "+
" 3.普通结账 "+ " 4.会员结账 "+ " 5.退出 ";
return a+b+ "\t ";


}

[/code]

[解决办法]
//初始化服务端socket信息
public void serverinit(){
try{
ss =new ServerSocket(8099);
s = new Socket();
System.out.println("服务端已经启动");


while(true){
ss.accept();
}
}catch(Exception ex)
{
ex.printStackTrace();
}

这里有问题s = new Socket() ??你的s 应该是被监听的socket 应该是s = ss.accept();吧,
[解决办法]
更好的方法是你可以获取到监听的socket后直接交给一个线程去处理

读书人网 >J2SE开发

热点推荐