使用简单的ServiceSockt实现服务端与客户端的通信

在客户/服务器通信模式中, 服务器端需要创建监听端口的 ServerSocket, ServerSocket 负责接收客户连接请求. 我们模拟用eclipse模拟服务端,用windows的命令行界面来模拟客户端。

  • 我们的电脑一般没有开启telnet服务,我们先在电脑上开启telnet服务,我的电脑(windows10)下面如何开启telnet如下图所示

这里写图片描述

  • 我们先写一个方法,相当于在客户端向服务端发送消息,而服务端只能接受消息无法发送消息
public static void test1() {
        try {
//          创建一个服务端,我们监听8888的端口
            ServerSocket serverSocket =new ServerSocket(8888);
//          等待客户端连接过来
            Socket socket= serverSocket.accept();

//          将客户端的内容放入流中,然后将流用Scanner包住
            InputStream is=socket.getInputStream();
            Scanner scanner=new Scanner(is);
//          将流中的内容读取出来,输入到控制台(服务端)
            while(scanner.hasNextLine()){
                System.out.println(scanner.nextLine());
            }
            scanner.close();
            is.close();
            socket.close();
            serverSocket.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

我们来测试一下这个方法是否有用,打开windows命令行界面输入“telnet 192.168.20.152 8888”,192.168.20.152是我的ip,8888是我开放的端口

这里写图片描述

在按住ctrl + [+] ,最后按住enter,就可以在上面显示文字了,不然不会显示出来的。
这里写图片描述
这个方法写的是成功的,实现了我们想要的功能
这里写图片描述

  • 客户端和用户端实现相互通讯的方法,但是有缺陷,只能一问一答
//  客户端和用户端实现相互通讯的方法,但是有缺陷,只能一问一答
    public static void test3() {
        ServerSocket serverSocket;
        try {
            serverSocket = new ServerSocket(8888);
            Socket socket=serverSocket.accept();
//          简单一点,将is流直接传入到Scanner里面,服务端的输入
            Scanner severScanner=new Scanner(System.in);
//          客户端的outputStream
            PrintWriter socketPrint=new PrintWriter(socket.getOutputStream());


//          客户端的inputStream
            Scanner socketScanner=new Scanner(socket.getInputStream());

            while(severScanner.hasNextLine()){
//              服务端向客户端输出消息
                socketPrint.println(severScanner.nextLine());
                socketPrint.flush();
//              如果
                if(socketScanner.hasNextLine()){
                    System.out.println(socketScanner.nextLine());
                }

            }

//          

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

测试的结果这里写图片描述

  • 最后实现客户端向服务端传送命令,从服务端获取文件的内容,在传输到客户端
public static void test5() {
        try {
            ServerSocket serverSocket=new ServerSocket(8888 );
            Socket socket=serverSocket.accept();

//          客户端的输入流
            Scanner socketScanner=new Scanner(socket.getInputStream());
//          服务端的输入流
            Scanner serverScanner=new Scanner(System.in);
//          客户端的输出流
            PrintWriter socketPrintWrite=new PrintWriter(socket.getOutputStream());

            while(socketScanner.hasNextLine()){
                String FileName=socketScanner.nextLine();
                Scanner file=getFile(FileName);

                while(file.hasNextLine()){
                    String str=file.nextLine();
                    socketPrintWrite.println(str);
                    socketPrintWrite.flush();

                }
                file.close();
            }
            socketScanner.close();
            serverScanner.close();
            socketPrintWrite.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    //这个方法是获取文件的内容
    public static Scanner getFile(String FileName) {
        Scanner scanner = null;
        try {
             scanner=new Scanner( new FileInputStream(FileName));

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(scanner!=null);
        return scanner; 
    }

当我们输入C:/Users/caowa/workspace/ServiceSockt/src/com/ServiceSockt/ServiceSockt.java这条指令时,就会获取一个java文件的详细内容返回给我们
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值