socket已经启动,但是我登陆或者注册都status都报空值,求解,急!!!!/**
* 注册处理
*/
@SuppressWarnings( { "unchecked", "deprecation" })
private void serverRegiste() {
try{
int flag=0; //是否重名判断标志
Register_Customer clientMessage=(Register_Customer)obj;
File flist=new File("user.txt");
if(flist.length()!=0){//判断是否是第一个注册用户
ObjectInputStream objInput=new ObjectInputStream(new FileInputStream(flist));
vList=(Vector)objInput.readObject();
//判断是否有重名
for(int i=0;i<vList.size();i++){
Register_Customer reg=(Register_Customer)vList.elementAt(i);
if(reg.custName.equals(clientMessage.custName)){
toClient.println("用户名已经存在,请重新输入");
flag=1;
break;
}
if(reg.custName.equals("所有人")){
toClient.println("禁止使用此用户名,请另外选择");
flag=1;
break;
}
if(reg.custName.equals("admin")||reg.custName.equals("Administrator")){
toClient.println("禁止使用此用户名,请另外选择");
flag=1;
break;
}
}
}
if(flag==0){
// 添加新注册用户
vList.addElement(clientMessage.custName+"注册成功");
//将量中的类写回到文件中
FileOutputStream file=new FileOutputStream(flist);
ObjectOutputStream objout=new ObjectOutputStream(file);
objout.writeObject(vList);
//发送注册成功信息
toClient.println(clientMessage.custName+"注册成功");
Date t=new Date();
log("用户"+clientMessage.custName+"注册成功,"+"注册时间:"+t.toLocaleString()+"\n");
file.close();
objout.close();
formClient.close();
}
}catch (ClassNotFoundException e) {
System.out.println(e);
}catch (IOException e) {
System.out.println(e);
}
}
//连接到服务器
Socket toServer;
toServer=new Socket(strServerIp,1001);
ObjectOutputStream streamToServer=new ObjectOutputStream(toServer.getOutputStream());
//写客户详细资料到服务器socket
streamToServer.writeObject((Register_Customer)rc);
//读取自服务器socket的状态
BufferedReader formServer=new BufferedReader(new InputStreamReader(toServer.getInputStream()));
String status=formServer.readLine();
//显示成功消息
JOptionPane op=new JOptionPane();
op.showMessageDialog(null, status);
if(status.equals(rc.custName+"注册成功")){
txtUserName.setText("");
pwdPassword.setText("");
pwdConfirmPass.setText("");
txtAge.setText("");
txtEmail.setText("");
}
* 注册处理
*/
@SuppressWarnings( { "unchecked", "deprecation" })
private void serverRegiste() {
try{
int flag=0; //是否重名判断标志
Register_Customer clientMessage=(Register_Customer)obj;
File flist=new File("user.txt");
if(flist.length()!=0){//判断是否是第一个注册用户
ObjectInputStream objInput=new ObjectInputStream(new FileInputStream(flist));
vList=(Vector)objInput.readObject();
//判断是否有重名
for(int i=0;i<vList.size();i++){
Register_Customer reg=(Register_Customer)vList.elementAt(i);
if(reg.custName.equals(clientMessage.custName)){
toClient.println("用户名已经存在,请重新输入");
flag=1;
break;
}
if(reg.custName.equals("所有人")){
toClient.println("禁止使用此用户名,请另外选择");
flag=1;
break;
}
if(reg.custName.equals("admin")||reg.custName.equals("Administrator")){
toClient.println("禁止使用此用户名,请另外选择");
flag=1;
break;
}
}
}
if(flag==0){
// 添加新注册用户
vList.addElement(clientMessage.custName+"注册成功");
//将量中的类写回到文件中
FileOutputStream file=new FileOutputStream(flist);
ObjectOutputStream objout=new ObjectOutputStream(file);
objout.writeObject(vList);
//发送注册成功信息
toClient.println(clientMessage.custName+"注册成功");
Date t=new Date();
log("用户"+clientMessage.custName+"注册成功,"+"注册时间:"+t.toLocaleString()+"\n");
file.close();
objout.close();
formClient.close();
}
}catch (ClassNotFoundException e) {
System.out.println(e);
}catch (IOException e) {
System.out.println(e);
}
}
//连接到服务器
Socket toServer;
toServer=new Socket(strServerIp,1001);
ObjectOutputStream streamToServer=new ObjectOutputStream(toServer.getOutputStream());
//写客户详细资料到服务器socket
streamToServer.writeObject((Register_Customer)rc);
//读取自服务器socket的状态
BufferedReader formServer=new BufferedReader(new InputStreamReader(toServer.getInputStream()));
String status=formServer.readLine();
//显示成功消息
JOptionPane op=new JOptionPane();
op.showMessageDialog(null, status);
if(status.equals(rc.custName+"注册成功")){
txtUserName.setText("");
pwdPassword.setText("");
pwdConfirmPass.setText("");
txtAge.setText("");
txtEmail.setText("");
}
解决方案 »
- 用java 如何得到实时汇率
- 问一个struts2标签的问题
- 经理让我用lucene做一个基于数据库全文检索的搜索引擎,让我自己估算下工作量,没有弄过,请教下大家的思路!
- 作为一个编程者,是先要广,还是先精?
- EJB中从EJBLocalHome和EJBLocalObject继承下来类有什么用啊?
- struts中关于浮点数显示的问题
- 各位大虾:哪里有Thinking in java中文版的电子书下载,请告知小弟,不胜感激!分多多!
- apache支持jms吗?应该怎么配置啊。
- GWT编译成功后运行控制台出现的问题
- ssh中有什么可以替换hibernate提高效率的
- acegi 迁移到 spring security 的问题
- iBtais的select语句中resultClass是java.util.HashMap返回的键值为什么都是大写的
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;public class Connection extends Thread {
/**
* 与客户端通讯Socket
*/
private Socket netClient;
/**
* 在线用户列表
*/
private Vector<Customer> userOnline;
/**
* 聊天信息
*/
private Vector<Chat> userChat;
/**
* 从客户到服务器 输入流
*/
private ObjectInputStream formClient;
/**
* 传到客户端,打印流
*/
private PrintStream toClient;
/**
* 注册用户列表
*/
private static Vector vList=new Vector();
/**
* 临时对象
*/
private Object obj;
/**
* 服务器日志窗体
*/
private ServerFrame sFrame;
/**
* 创建与客户端通讯
* @param frame
* @param client
* @param u
* @param c
*/
public Connection(ServerFrame frame,Socket client,Vector u,Vector c){
netClient=client;
this.userOnline=u;
this.userChat=c;
this.sFrame=frame;
try{
//发生双向通信
//检索客户输入
formClient =new ObjectInputStream(netClient.getInputStream());
//服务器写到客户
toClient=new PrintStream(netClient.getOutputStream());
}catch (IOException e) {
try{
netClient.close();
}catch (IOException e1) {
System.out.println("不能建立流"+e1);
return;
}
}
this.start();
}
// /**
// * 处理与客户端的通讯线程
// */
public void run(){
try{
obj=(Object)formClient.readObject();
System.out.println("---------------"+obj.getClass().getName());
if(obj.getClass().getName().equals("Customer"))
serverLogin();
else if(obj.getClass().getName().equals("Register_Customer"))
serverRegiste();
else if(obj.getClass().getName().equals("Message"))
serverMessage();
else if(obj.getClass().getName().equals("Chat"))
serverChat();
else if(obj.getClass().getName().equals("Exit"))
serverExit();
}catch (IOException e1) {
System.out.println(e1);
}catch (ClassNotFoundException e2) {
System.out.println("读取对象发生错误!"+e2);
}finally{
try{
netClient.close();
}catch (IOException e) {
System.out.println(e);
}
}
} /**
* 刷新服务器日志窗体在线列表
*/
private void freshServerUserList() {
String[] userList=new String[50];
Customer cus=null;
for(int j=0;j<userOnline.size();j++){
cus=(Customer)userOnline.get(j);
userList[j]=cus.custeName;
}
sFrame.list.setListData(userList);
sFrame.txtNumber.setText(""+userOnline.size());
sFrame.lblUserCount.setText("当前在线人数:"+userOnline.size());
}
/**
* 日志服务器窗体写入信息
* @param log 日志信息
*/
private void log(String log) {
String newlog=sFrame.taLog.getText()+"\n"+log;
sFrame.taLog.setText(newlog);
}
/**
* 处理登陆事件
*/
@SuppressWarnings("deprecation")
private void serverLogin() {
try{
Customer clientMessage2=(Customer)obj;
//读取文件
FileInputStream file3=new FileInputStream("user.txt");
ObjectInputStream objInput1=new ObjectInputStream(file3);
vList=(Vector)objInput1.readObject();
int find=0; //查找判断标志
for(int i=0;i<vList.size();i++){
Register_Customer reg=(Register_Customer)vList.elementAt(i);
if(reg.custName.equals(clientMessage2.custeName)){
find=1;
if(!reg.custPassword.equals(clientMessage2.custPassword)){
toClient.println("密码不正确");
break;
}else{
//判断是否已经登录
int login_flag=0;
for(int j=0;j<userOnline.size();j++){
String _custname=((Customer)userOnline.elementAt(j)).custeName;
if(clientMessage2.custeName.equals(_custname)){
login_flag=1;
break;
}
}
if(userOnline.size()>-50){
toClient.println("登录人数过多,请稍候再试!");
break;
}
if(login_flag==0){
clientMessage2.custHead=reg.head;
userOnline.addElement(clientMessage2);
toClient.println("登录成功");
Date t=new Date();
log("用户"+clientMessage2.custeName+"登录成功,"+"登录事件:"+t.toLocaleString()+"\n");
freshServerUserList();
break;
}else{
toClient.println("该用户已登录");
}
}
}else{
continue;
}
}
if(find==0){
toClient.println("没有这个用户,请先注册");
}
file3.close();
objInput1.close();
formClient.close();
}catch (ClassNotFoundException e) {
System.out.println(e);
}catch (IOException e) {
System.out.println(e);
}
}
/**
* 注册处理
*/
@SuppressWarnings( { "unchecked", "deprecation" })
private void serverRegiste() {
try{
int flag=0; //是否重名判断标志
System.out.println("---------------"+flag);
Register_Customer clientMessage=(Register_Customer)obj;
File flist=new File("user.txt");
if(flist.length()!=0){//判断是否是第一个注册用户
ObjectInputStream objInput=new ObjectInputStream(new FileInputStream(flist));
vList=(Vector)objInput.readObject();
//判断是否有重名
for(int i=0;i<vList.size();i++){
Register_Customer reg=(Register_Customer)vList.elementAt(i);
if(reg.custName.equals(clientMessage.custName)){
toClient.println("用户名已经存在,请重新输入");
flag=1;
break;
}
if(reg.custName.equals("所有人")){
toClient.println("禁止使用此用户名,请另外选择");
flag=1;
break;
}
if(reg.custName.equals("admin")||reg.custName.equals("Administrator")){
toClient.println("禁止使用此用户名,请另外选择");
flag=1;
break;
}
}
}
if(flag==0){
// 添加新注册用户
vList.addElement(clientMessage.custName+"注册成功");
//将量中的类写回到文件中
FileOutputStream file=new FileOutputStream(flist);
ObjectOutputStream objout=new ObjectOutputStream(file);
objout.writeObject(vList);
//发送注册成功信息
toClient.println(clientMessage.custName+"注册成功");
Date t=new Date();
log("用户"+clientMessage.custName+"注册成功,"+"注册时间:"+t.toLocaleString()+"\n");
file.close();
objout.close();
formClient.close();
}
}catch (ClassNotFoundException e) {
System.out.println(e);
}catch (IOException e) {
System.out.println(e);
}
}
/**
* 发送信息处理
*/
private void serverMessage() {
try{
Message msg=new Message();
msg.userOnline=userOnline;
msg.chat=userChat;
msg.ti=sFrame.ti;
msg.serverMessage=""+sFrame.serverMessage;
ObjectOutputStream outputStream=new ObjectOutputStream(netClient.getOutputStream());
outputStream.writeObject((Message)msg);
netClient.close();
outputStream.close();
}catch (IOException e) {
}
}
/**
* 增加信息处理
*/
private void serverChat() {
//将接收到的对象值赋给聊天信息的序列化对象
Chat cObj=new Chat();
cObj=(Chat)obj;
cObj.chatMessage=WordFilter.filter(cObj.chatMessage);
chatLog(cObj);
//将聊天信息的序列化对象添加到保存聊天信息的矢量中
userChat.addElement((Chat)cObj);
return;
}
/**
* 日志服务器窗体写聊天 信息
* @param obj2 聊天 信息对象
*/
@SuppressWarnings("deprecation")
private void chatLog(Chat obj) {
String newlog=sFrame.taMessage.getText();
SimpleDateFormat format=new SimpleDateFormat("yyyy:MM:dd hh:mm:ss");
Date date=new Date();
if(!obj.whisper){
newlog+="\n";
newlog+=("["+format.format(date.getDate())+"]");
newlog+=obj.chatUser;
newlog+="->";
newlog+=obj.chatToUser;
newlog+=":";
newlog+=obj.chatMessage;
}
sFrame.taMessage.setText(newlog);
} /**
* 用户退出处理
*/
@SuppressWarnings("deprecation")
private void serverExit() {
Exit exit=new Exit();
exit=(Exit)obj;
removeUser(exit);
if(sFrame.ti.equals(exit.exitname)){
sFrame.ti="";
}
Date t=new Date();
log("用户"+exit.exitname+"已经退出,"+"退出时间:"+t.toLocaleString());
freshServerUserList();
} /**
* 在线用户中删除退出用户
* @param exit 退出用户名对象
*/
private void removeUser(Exit exit) {
Vector<Customer> vec=new Vector<Customer>();
Customer _cus=null;
for(int i=0;i<userOnline.size();i++){
_cus=(Customer)userOnline.get(i);
if(!exit.exitname.equals(_cus.custeName)){
vec.add(_cus);
}
}
userOnline.removeAllElements();
for(int j=0;j<vec.size();j++){
_cus=(Customer)vec.get(j);
userOnline.add(_cus);
}
}
}