服务器
package TCP_多用户登录;
public class Multi_Server {
public static void main(String[] args) throws IOException {
System.out.println("服务器开始工作");
ServerSocket server=new ServerSocket(8888);
boolean isRunning =true;
while(isRunning) {
Socket client = server.accept();
new Thread(new channel(client)).start();
}
}
static class channel implements Runnable{
private Socket client;
private DataInputStream in;
private int port;
private String account="";//存储账户
private String password="";//存储密码
channel(Socket client){
this.client=client;
//指定端口使用ServerSocket(port) 创建服务器
}
@Override
public void run() {
try {
// 阻塞式等待连接
System.out.println("建立了一个连接");
//操作:输入输出操作
enter();
/*
* 判断账户密码是否正确 ,并返回信息
*/
sent();
//释放资源
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void enter() throws IOException {
//操作:输入输出操作
in =new DataInputStream(client.getInputStream());
String buf=in.readUTF();//读取信息
String[] datasarray = buf.split("&&");//拆分信息取出账户密码
for (String inof : datasarray) {
String [] datas =inof.split(":");
if(datas[0].equals("uname")) {
account =datas[1];
}
else if(datas[0].equals("word")) {
password=datas[1];
}
}
System.out.println("登陆的账户:"+account);
System.out.println("登陆的密码:"+password);
}
public void sent() throws IOException {
/*
* 判断账户密码是否正确 ,并返回信息
*/
DataOutputStream out =new DataOutputStream(new BufferedOutputStream(client.getOutputStream()));
if(account.equals("fengqiao")&&password.equals("giaogiao")) {
**加粗样式** out.writeUTF("登陆成功");
}else {
out.writeUTF("登陆失败");
}
out.close();
}
}
}
用到了内部类
多线程中这段代码是关键
boolean isRunning =true;
while(isRunning) {
Socket client = server.accept();
new Thread(new channel(client)).start();
}
客户端
package TCP_多用户登录;
public class Multi_Client {
private int port ;
private String ip;
private Socket client;
private DataOutputStream out;
public Multi_Client(String ip,int port) {
this.ip=ip;
this.port=port;
}
public void test() {
try {
//建立连接:使用Socket创建客户端+服务器的地址和端口
client =new Socket(ip,port);
//.操作输入输出流操作
out =new DataOutputStream(new BufferedOutputStream(client.getOutputStream()));
BufferedReader read =new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入账户");
String account = read.readLine();
System.out.println("请输入密码");
String password = read.readLine();
out.writeUTF("uname:"+account+"&&"+"word:"+password);
//释放资源
out.flush();
//返回登录信息
DataInputStream in =new DataInputStream(client.getInputStream());
System.out.println(in.readUTF());
while(true) {
if(read.readLine().equals("bye")) {
out.close();
client.close();
break;
}
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println("客户端启动");
Multi_Client run=new Multi_Client("localhost", 8888);
run.test();
}
}
拜拜,下期见!