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("");
}

解决方案 »

  1.   

    记得在每次ObjectOutputStream 的writeObject后面flush()一下 
      

  2.   

    我重写了线程的run()方法,在里面处理的注册,登录,现在好像是并没有进入到这个方法里面去,不知道是为什么,我处理线程好像不太好!不知道有没有更好的方法package QQ;import java.io.File;
    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);
    }
    }
    }
      

  3.   

    楼主,我也在写java聊天程序,可不可以把你的源代码发给我看一下