参考文档:
https://www.sxt.cn/Java_jQuery_in_action/twelve-tcpsocket.html
参考视频:
https://www.bilibili.com/video/BV1ct411n7oG?p=245
1.代码功能
1.判断从客户端接收到的用户名和密码是否和已知的一致
2.返回服务器判断的结果到客户端上
2.学习重点
1.分清哪边是输入流哪边是输出流
2.split函数和数组的遍历
3.客户端代码
1.发送数据用的输出流和writeUTF(发送用户名密码)
2.接收数据用的输入流和readUTF (读取服务器判断的结果)
3.其他思路和之前一样
package com.sxt.tcp;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
/**
*模拟登录 双向
* 创建客户端
* 1.建立连接:使用Socket创建客户端+服务的地址和端口
* 2.操作:输入输出流操作
* 3.释放资源
* @author Yangxiaoxia
*
*/
public class LoginTwoWayClient {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("-----Client-----");
BufferedReader console =new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入用户名:");
String uname=console.readLine();
System.out.print("请输入密码:");
String upwd =console.readLine();
//1.建立连接:使用Socket创建客户端+服务的地址和端口
Socket client=new Socket("localhost",8888);
//2.操作:输入输出流操作
DataOutputStream dos=new DataOutputStream(client.getOutputStream());
dos.writeUTF("uname="+uname+"&"+"upwd="+upwd);
dos.flush();
DataInputStream dis=new DataInputStream(client.getInputStream());
String result=dis.readUTF();
System.out.println(result);
//3.释放资源
dos.close();
client.close();
}
}
4.服务器端代码
1.判断客户端传来的输入流里的数据是否符合条件,然后以输出流返回结果给客户端
package com.sxt.tcp;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 模拟登录 双向
* 创建服务器
* 1.指定端口 使用ServerSocket创建服务器
* 2.阻塞式等待连接 accept
* 3.操作:输入输出流操作
* 4.释放资源
* @author Yangxiaoxia
*
*/
public class LoginTwoWayServer {
public static void main(String[] args) throws IOException {
System.out.println("------Server-------");
// 1.指定端口 使用ServerSocket创建服务器
ServerSocket server=new ServerSocket(8888);
// 2.阻塞式等待连接 accept
Socket client=server.accept();
System.out.println("一个客户端建立了连接");
// 3.操作:输入输出流操作
DataInputStream dis=new DataInputStream(client.getInputStream());
String data=dis.readUTF();
System.out.println(data);
String uname=" ";
String upwd=" ";
//分析
String[] dataArray=data.split("&");
for(String info:dataArray) {
String[] userinfo=info.split("=");
if(userinfo[0].equals("uname")) {
uname=userinfo[1];
}else if(userinfo[0].equals("upwd")) {
upwd=userinfo[1];
}
}
//输出
DataOutputStream dos=new DataOutputStream(client.getOutputStream());
if(uname.equals("baidu")&& upwd.equals("123456")) {//成功
dos.writeUTF("登录成功,欢迎回来");
}else {//失败
dos.writeUTF("用户名或密码错误");
}
dos.flush();
//4.释放资源
dis.close();
client.close();
server.close();
}
}
网友评论