参考文档:
https://www.sxt.cn/Java_jQuery_in_action/twelve-tcpsocket.html
参考视频:
https://www.bilibili.com/video/BV1ct411n7oG?p=244
1.代码功能
在console下实现客户端输入用户名密码,服务器端能接收到
2.学习重点
1.客户端和服务器端的通信关系
2.通过Socket实现通信的流程(7步)
3.BufferedReader获取键盘输入(和Scanner区别)
3.客户端代码
3.创建客户端Socket,并设置服务器的IP及端口
4.BufferedReader获取键盘输入
5.创建数据输出流dos(客户端获取Socket的输出流)以writeUTF函数把数据传过去
7.关闭数据流和客户端
package com.sxt.tcp;
import java.io.BufferedReader;
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 Client {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("-----Client-----");
BufferedReader console =new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入用户名:");
String uname=console.readLine();
System.out.println("请输入密码:");
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();
//3.释放资源
dos.close();
client.close();
}
}
4.服务器端代码
1.通过ServerSocket类创建server,带监听端口
2.ServerSocket调用accept()方法,阻塞式等待client连接
6.创建数据输入流dis(客户端获取Socket的输入流)以readUTF函数读取客户端传来的数据
8.关闭数据流和服务器端
package com.sxt.tcp;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 熟悉流程
* 创建服务器
* 1.指定端口 使用ServerSocket创建服务器
* 2.阻塞式等待连接 accept
* 3.操作:输入输出流操作
* 4.释放资源
* @author Yangxiaoxia
*
*/
public class Server {
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);
//4.释放资源
dis.close();
client.close();
server.close();
}
}