概述

模拟最简单的服务器和客户端的通讯

  1. 客户端连接到服务器
  2. 客户端向服务器发送请求数据
  3. 服务器接收数据并处理
  4. 服务器返回响应数据
  5. 客户端接收响应数据

服务器端

下面的代码模拟了最简单的只接收了一个客户端请求的场景:

public class Server {
    public static void main(String[] args) throws Exception {
		//服务器端监听在8000端口
        ServerSocket serverSocket = new ServerSocket(8000);
        while(true){
			//等待客户端的接入
            Socket socket = serverSocket.accept();
		
			//创建输入输出流
            DataInputStream dis = new DataInputStream(socket.getInputStream());
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

            while(true){
                //接收请求
                System.out.println("接收到的数据:"+dis.readUTF());//读取数据
                //返回数据
                dos.writeUTF("服务器已接收到数据");
            }
        }
    }
}

注意: 上面的代码只是为了演示最简单的实现,并没有对异常进行处理,并且也没有关闭流

客户端

public class Client {

    public static void main(String[] args) throws Exception {
		//连接服务器
        Socket socket = new Socket("localhost",8000);

        //获取用户输入
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

		//创建输入输出流
        DataInputStream dis = new DataInputStream(socket.getInputStream());
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

        while(true){
            //发送请求
            dos.writeUTF(reader.readLine());//读取用户输入并发送数据
            //接收数据
            System.out.println(dis.readUTF());//读取数据
        }

    }
}

注意: 上面的代码只是为了演示最简单的实现,并没有对异常进行处理,并且也没有关闭流

输入流和输出流的注意点

  1. 输入流和输出流的意思都是相对于机器本身来说的

    • 对于客户端来说: 输入流是InputStream,输出流是OutputStream
    • 对于服务器端来说: 输入流是InputStream,输出流是OutputStream

    服务器端的输出流的内容会在客户端的输入流中接收到 客户端的输出流的内容会在服务器端的输入流中接收到

  2. 要对IO异常进行合适的处理

  3. 在程序结束时一定要将IO流进行关闭,避免资源的浪费

    可以使用java8中的 try(...)来自动的关闭资源

0条评论
头像
ICP证 : 浙ICP备18021271号