qq_36561843 2017-04-09 15:22 采纳率: 0%
浏览 856

萌新自学java求教 关于socket的一个问题

为什么客户端能接受到反馈回来的用户名密码但是配置文件为空而且后续功能不能使用呢?
代码如下 可能注释的不是太清楚 望指教

//多用户登录服务端
package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;

public class 多用户登录服务端 extends Thread {
Socket socket;
static File file=new File("E://login.Properties");
static {

   if(!file.exists())    
   {
       try {
        file.createNewFile();
    } catch (IOException e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
    }
   }




 }
public static void main(String[] args) throws IOException {

        ServerSocket  sersocket=new ServerSocket(9000);
         while (true)
             //不同的用户获取各自的socket
         {  Socket socket= sersocket.accept();
             new 多用户登录服务端(socket).start();

         }
    } 

public 多用户登录服务端(Socket socket) {
    // TODO 自动生成的构造函数存根
    this.socket=socket;
}

public void run()

    {while(true)
        try{
        //获取socket的输入流对象    
     {  BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(socket.getInputStream()));
     //获取socket的输出流对象   
     OutputStreamWriter outputStreamWriter=new OutputStreamWriter(socket.getOutputStream());
       String user=bufferedReader.readLine();
       //将选项 姓名 密码分开并用数组存储 
       String[] data=user.split(" ");
        String option=data[0];
        String username=data[1];
        String password=data[2];
      if("a".equalsIgnoreCase(option))
          //登录
      { Properties properties=new Properties();
        properties.load(new FileReader(file));
        if(properties.containsKey(username))
        {String pass=properties.getProperty(username);
          if(pass.equals(password))
          {
              outputStreamWriter.write("欢迎"+username+"登录\r\n");
          }
          else{
              outputStreamWriter.write("密码错误\r\n");
          }
        }else
        { outputStreamWriter.write("用户名不存在\r\n");}
        outputStreamWriter.flush();   
      }
       else if("b".equalsIgnoreCase(option))
           //注册
      { Properties properties=new Properties();
        properties.load(new FileReader(file));
           if(!properties.containsKey(username))
           {    properties.setProperty(username, password);
                properties.store(new FileWriter(file), "user\r\n");

            outputStreamWriter.write("注册成功");
           }
           else{
               outputStreamWriter.write("用户名已存在,请重新注册\r\n");
           }

      }
      outputStreamWriter.flush(); 
     }

} catch (Exception e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
}
    }

}
//多用户登录客户端

package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class 多用户登录客户端 {
public static void main(String[] args) throws IOException {
Socket socket=new Socket(InetAddress.getLocalHost(),9000);
//获取socket的输出流对象
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(socket.getOutputStream());
//获取socket的输入流对象
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//从键盘接收选项
BufferedReader keyReader=new BufferedReader( new InputStreamReader(System .in));
while (true){
System.out.println("请选择 登录(A) 注册(B)");
String option=keyReader.readLine();
if("a".equalsIgnoreCase(option)){
login(outputStreamWriter,keyReader,option);
//读取服务端的反馈信息
String line=bufferedReader.readLine();
System.out.println(line);
}else if("b".equalsIgnoreCase(option))
{
login(outputStreamWriter,keyReader,option);
//读取服务端的反馈信息
String line=bufferedReader.readLine();
System.out.println(line);
}
}

}


//获取用户名密码并传给服务端
public static void login(OutputStreamWriter  outputStreamWriter,BufferedReader keyreader, String option) throws IOException
{
   System.out.println("请输入用户名");
    String username=  keyreader.readLine();
     System.out.println("请输入密码");
     String password=keyreader.readLine();
     String line=option+" "+username+" "+keyreader+"/r/n";
     outputStreamWriter.write(line);
     outputStreamWriter.flush();


    }




}
  • 写回答

3条回答 默认 最新

  • devmiao 2017-04-09 15:47
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 怎么获取下面的: glove_word2id.json和 glove_numpy.npy 这两个文件
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug