ServerSocket服务器端
- ServerSocket ss = new ServerSocket()
创建服务器 Socket端口 - socket.bind(new InetSocketAddress(“localhost”, 8888), 50)
设置 服务器 IP 和端口, 配置监听 客户端数量 - Socket socket = ss.accpet()
阻塞式等待客户端的连接 - 给每一个客户端开启一个线程
- socket.getInputStream()
获取输入流、接收客户端数据- 1.将输入流转成 BufferedReader
来接收客户端发送的数据 - 2.将输入流转成 DataInputStream
接收客户端发送的数据
- 1.将输入流转成 BufferedReader
- socket.getOutputStream()
获取输出流、发送数据- 1、将输出流转成 BufferedWriter
调用 flush 将缓存数据 发送给客户端 - 2、发送的数据 必须 以 \n 结尾
告诉客户端数据发送已完成
PS: 读取浏览器发送的数据,数据以 空字符串判断,必须通过判断isEmpty()来判断是否读取完成
- 1、将输出流转成 BufferedWriter
public class Server {
public static void main(String[] args) throws Exception {
//创建一个 套接字 socket 对象
ServerSocket ss = new ServerSocket();
// 设置服务器 IP 和端口 ,配置监听客户端数量
ss.bind(new InetSocketAddress("localhost",8888));
//开启一个死循环,不断接受客户端的链接
while (true){
// 被动等待客户端的连接
// 返回一个socket 用来连接客户端和服务器
Socket socket = ss.accept();
// 多线程版服务器 new Thread(() -> {})
// 开启一个线程 ,给每个客户端开启一个线程
new Thread(() ->{
try (
// 接受客户端发送 的数据 , 获取输入流
InputStream in = socket.getInputStream();
// 服务器向客户端发送数据的通道
OutputStream out = socket.getOutputStream();
// 读取客户端发送的数据
BufferedReader bis = new BufferedReader(new InputStreamReader(in));
BufferedWriter bos = new BufferedWriter(new OutputStreamWriter(out));
){
// 读取数据
StringBuilder sb = new StringBuilder();
// 约定客户端发送一个空字符串作为结束,空字符串单独一行
String line = "";
// 读取一行数据
while (!"".equals(line = bis.readLine())) {
sb.append(line);
}
System.out.println(sb);
// 向客户端发送消息
bos.write("你好,服务器!!!!");
bos.newLine();
bos.flush();
bos.write("test");
bos.newLine();
bos.flush();
bos.write("abc");
bos.flush();
} catch (Exception e) {
e.printStackTrace();
}finally {
//关闭流
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
}
Socket客户端
- Socket socket = new Socket()
创建网络套接字 - socket.connect(new InetSocketAddress(“localhost”, 8888))
连接服务器 - 获取输入流、输出流
用法参考 服务端 - socket.close()
关闭 套接字
public class Cliant {
public static void main(String[] args) throws Exception{
// 构建一个 套接字对象
Socket socket = new Socket();
// 连接服务器
socket.connect(new InetSocketAddress("localhost",8888));
try (
//
InputStream in = socket.getInputStream();
BufferedReader bis = new BufferedReader(new InputStreamReader(in));
OutputStream out = socket.getOutputStream();
BufferedWriter bos = new BufferedWriter(new OutputStreamWriter(out));
){
// 发送消息
bos.write("你好,服务器!!!!");
bos.newLine();
bos.flush();
bos.write("test");
bos.newLine();
bos.flush();
bos.write("");
bos.newLine();
bos.flush();
// 读取数据
StringBuilder sb = new StringBuilder();
String line = "";
while ((line = bis.readLine()) != null){
sb.append(line);
}
System.out.println(sb);
}finally {
socket.close();
}
}
}
特点:
一种面向连接,可靠传输的协议