为什么客户端能接受到反馈回来的用户名密码但是配置文件为空而且后续功能不能使用呢?
代码如下 可能注释的不是太清楚 望指教
//多用户登录服务端
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();
}
}
http://bbs.csdn.net/topics/390614950
你没有socket
server啊
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ScoketServer{
//搭建服务器端
public static void main(String[] args) throws IOException{
ScoketServer socketService = new ScoketServer();
//1、a)创建一个服务器端Socket,即SocketService
socketService.oneServer();
}
public void oneServer(){
try{
ServerSocket server=null;
try{
server=new ServerSocket(5209);
//b)指定绑定的端口,并监听此端口。
System.out.println("服务器启动成功");
//创建一个ServerSocket在端口5209监听客户请求
}catch(Exception e) {
System.out.println("没有启动监听:"+e);
//出错,打印出错信息
}
Socket socket=null;
try{
socket=server.accept();
//2、调用accept()方法开始监听,等待客户端的连接
//使用accept()阻塞等待客户请求,有客户
//请求到来则产生一个Socket对象,并继续执行
}catch(Exception e) {
System.out.println("Error."+e);
//出错,打印出错信息
}
//3、获取输入流,并读取客户端信息
String line;
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//InputStream SocketReader = socket.getInputStream();
//由Socket对象得到输入流,并构造相应的BufferedReader对象
PrintWriter writer=new PrintWriter(socket.getOutputStream());
//由Socket对象得到输出流,并构造PrintWriter对象
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//由系统标准输入设备构造BufferedReader对象
System.out.println("Client:"+in.readLine());
//在标准输出上打印从客户端读入的字符串
line=br.readLine();
//从标准输入读入一字符串
//4、获取输出流,响应客户端的请求
while(!line.equals("end")){
//如果该字符串为 "bye",则停止循环
writer.println(line);
//向客户端输出该字符串
writer.flush();
//刷新输出流,使Client马上收到该字符串
// System.out.println("Server:"+line);
//在系统标准输出上打印读入的字符串
System.out.println("Client:"+in.readLine());
//从Client读入一字符串,并打印到标准输出上
// line=br.readLine();
//从系统标准输入读入一字符串
} //继续循环
//5、关闭资源
writer.close(); //关闭Socket输出流
in.close(); //关闭Socket输入流
socket.close(); //关闭Socket
server.close(); //关闭ServerSocket
}catch(Exception e) {//出错,打印出错信息
System.out.println("Error."+e);
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URL;
public class ScoketCosumer {
// 搭建客户端
public static void main(String[] args) throws IOException {
try {
// 1、创建客户端Socket,指定服务器地址和端口
// Socket socket=new Socket("127.0.0.1",5200);
Socket socket = new Socket("localhost", 5209);
System.out.println("客户端启动成功");
// 2、获取输出流,向服务器端发送信息
// 向本机的52000端口发出客户请求
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 由系统标准输入设备构造BufferedReader对象
PrintWriter write = new PrintWriter(socket.getOutputStream());
// 由Socket对象得到输出流,并构造PrintWriter对象
//3、获取输入流,并读取服务器端的响应信息
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 由Socket对象得到输入流,并构造相应的BufferedReader对象
String readline;
readline = br.readLine(); // 从系统标准输入读入一字符串
while (!readline.equals("end")) {
// 若从标准输入读入的字符串为 "end"则停止循环
write.println(readline);
// 将从系统标准输入读入的字符串输出到Server
write.flush();
// 刷新输出流,使Server马上收到该字符串
System.out.println("Client:" + readline);
// 在系统标准输出上打印读入的字符串
System.out.println("Server:" + in.readLine());
// 从Server读入一字符串,并打印到标准输出上
readline = br.readLine(); // 从系统标准输入读入一字符串
} // 继续循环
//4、关闭资源
write.close(); // 关闭Socket输出流
in.close(); // 关闭Socket输入流
socket.close(); // 关闭Socket
} catch (Exception e) {
System.out.println("can not listen to:" + e);// 出错,打印出错信息
}
}
}