1.客户端
package demo01;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
try {
// 创建Socket对象
Socket socket = new Socket("127.0.0.1", 8384);
// 打开和服务器的链接 打开输出流
OutputStream os = socket.getOutputStream();
// 发送信息
// String msg = "hi, nice to meet you!";
Scanner sc=new Scanner(System.in);//模拟用户登录
System.out.println("请输入姓名:");
String name=sc.next();
System.out.println("请输入密码");
String pwd=sc.next();
os.write(name.getBytes());
os.write("\r\n".getBytes());
os.write(pwd.getBytes());
// 告诉服务器,客户端发送完毕
socket.shutdownOutput();
// 读取服务器响应的内容
String s;
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(s=br.readLine().toString());
// str=br.readLine();
if(s.equals("no")){//判断用户信息的正确性
System.out.println("登录失败!");
}else{
System.out.println("登录成功!");
}
// 关闭
br.close();
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.服务器端
package demo01;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.ObjectInput;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Server {
public static void main(String[] args) throws IOException, ClassNotFoundException {
File file=new File("C:info.txt");//用户信息提前存入硬盘
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(file));//创建对象流实现添加用户默认信息
List<User>list=new ArrayList<User>();//以集合为单位存取信息
User u1=new User("zm","123456");
User u2=new User("lx","12345");
list.add(u1);
list.add(u2);
oos.writeObject(list);//提前预存用户信息 方便以后用户登录核实
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));
List<User>list2=new ArrayList<User>();
list2=(List<User>)ois.readObject();//从文件中读取信息存入list2集合
for(User u:list2){
System.out.println(u);
}
try {//socket 编程
ServerSocket ss = new ServerSocket(8384);
Socket socket = ss.accept();
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s;
String str[]=new String[2];//用户名和信息存入字符串数组以便和文件中数据比较判断用户信息的正确性
int t=0;
while((s = br.readLine()) != null) {
str[t++]=s;
System.out.println(s);
}
// 响应客户端
String flag="no";
for(User u:list2){//判断用户信息的正确性
//System.out.println(u.getName()+"||"+u.getPwd());
if(u.getName().equals(str[0].trim())&&u.getPwd().equals(str[1].trim())){
flag="yes";
}
}
OutputStream os = socket.getOutputStream();
os.write(flag.getBytes());//与客户端交互
os.close();
br.close();
is.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.实例对象 (序列化与反序列化实现对象存取)
package demo01;
import java.io.Serializable;
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*
*/
private String name;//用户名
private String pwd;//密码
public User(String name, String pwd) {
super();
this.name = name;
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User [name=" + name + ", pwd=" + pwd + "]";
}
}