客户端与服务器通信(版本3)

缺点不能连续发和连续接受,只能先客户端发,再服务器发,再客户端发这样循环,而不能客户端发,客户端再发,这样程序会出现阻塞

客户端

//服务端可以不断的发送信息给客户端  也可以不断的接受客户端的信息
//一个客户端   一个服务器
public class Client03 {
    
    


    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
    
    


        //创建客户端套接字   用户交互服务器

        try {
    
    
            //这行代码放进while里面就会创建多个客户端
            Socket socket = new Socket("127.0.0.1", 8003);
            //根据套接字获取输出流  把信息从内存拿出来就是输出  写进内存就是输入

            while (true) {
    
    
                TimeUnit.SECONDS.sleep(1);
                OutputStream outputStream = socket.getOutputStream();

                //将字节输出流包装成数据字节输出
                DataOutputStream dataOutputStream = new DataOutputStream(outputStream);

                dataOutputStream.flush();
                //这行代码的确定缺点 程序会阻塞在这里等待输入 
                dataOutputStream.writeUTF("客户端说:"+sc.next());

                //获取服务端发过来的消息
                DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());

                String s = dataInputStream.readUTF();
                System.out.println(s);
            }

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

服务器

//服务端可以不断的发送信息给客户端  也可以不断的接受客户端的信息
//一个客户端   一个服务器
public class Server03 {
    
    

    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
    
    


        //创建服务端套接字ServerSocket  并指定端口号


        try {
    
    
            ServerSocket serverSocket = new ServerSocket(8003);
            //通过服务端套接字  监听客户端的连接  如果没有客户端连接  程序会停留在此处


            Socket socket = serverSocket.accept();//返回的就是客户端的套接字   获取一个连接

            while(true) {
    
    
                TimeUnit.SECONDS.sleep(1);
                //根据客户端套接字  获取对应的输入流
                InputStream inputStream = socket.getInputStream();

                //将字节输入流包装成  数据字节流
                DataInputStream dataInputStream = new DataInputStream(inputStream);

                String s = dataInputStream.readUTF();
                System.out.println(s);

                //服务端继续给客户端发送消息  这里使用socket  而不是serverSocket  是因为服务端只有一个  客户端有很多个  给指定客户端发信息

                DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
                //这行代码的确定缺点 程序会阻塞在这里等待输入  所以不能实现连续发
                dataOutputStream.writeUTF("服务端说:"+sc.next());
                dataOutputStream.flush();
            }





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

        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45100361/article/details/113530808