代入

应用多线程来实现服务器和多个客户端之间的通信
基本步骤:

  1. 服务器端创建ServerSocket,循环调用accept()等待客户端的连接
  2. 客户端创建一个socket并请求和服务器连接
  3. 服务器接受客户端请求,创建socket与该客户建立专线连接
  4. 建立连接的两个socket在一个单独的线程上对话
  5. 服务器端继续等待新的连接

先写服务器端

  • 当写到ServerThread03这里的时候可以先写下面的多线程ServerThread03类
//提供多个客户端的服务
public class Server03 {
    public static void main(String [] args){
        try {

            ServerSocket serverSocket = new ServerSocket(3031);
            System.out.println("服务器端启动,等待客户端的请求");
            //循环监听客户顿的请求
            int count = 0;
            while (true){
                Socket socket = serverSocket.accept();
                ServerThread03 serverThread03 = new ServerThread03(socket);
                serverThread03.start();
                count++;
                System.out.println("客户端的数量"+count);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

再写多线程ServerThrea03.java

  • 注意端口号要与客户端的端口号保持一致
public class ServerThread03 extends Thread {
    Socket socket = null;

    public ServerThread03(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            InputStream is =socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ((line=br.readLine())!=null){
                System.out.println("我是服务器,客户端说:"+line);
            }
            socket.shutdownInput();

            //发送数据给客户端
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);
            pw.write("客户端,欢迎你!");
            pw.flush();

            pw.close();
            is.close();
            isr.close();
            br.close();
            os.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

最后写客户端

public class Client02 {
    public static void main(String []args){
        try {
            Socket socket = new Socket("localhost",3031);
            //打开输出流
            OutputStream os = socket.getOutputStream();
            //将输出流转换成打印流
            PrintWriter pw = new PrintWriter(os);
            pw.write("用户名:***;密码:123456");
            //刷新缓冲区
            pw.flush();
            socket.shutdownOutput();

            //接收服务器的数据
            InputStream is =socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line;
            while ((line=br.readLine())!=null){
                System.out.println("我是客户端,服务器给我的数据是:"+line);

            }

            //关闭资源
            pw.close();
            br.close();
            is.close();
            isr.close();;
            socket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

效果
在这里插入图片描述
在这里插入图片描述
以往文章:
Socket通信之实现数据端跟客户端的双向通信
android学习之Socket通信
如果对您有帮助,麻烦点个赞哦,谢谢~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐