javaseday29(tcp)

来源:互联网 发布:软件销售工作好么 编辑:程序博客网 时间:2024/05/29 18:55
/*         * tcp传输 客户端建立的过程 1、创建tcp客户端socket服务 使用的是socket对象 建议该对象以创建就明确目的地 或者是要连接的主机         * 2、如果连接建立成功就说明 数据传输通道已建立 该通道就是socket流 socket流是底层建立好的 既然是流 说明这里既有输出也有输入         * 想要输入或者输出流对象可以通过socket获取 网络传输必须是字节 因为什么都有 可以通过getOutputStream()         * 和getInputStream()获取两个字节流 3、使用输出流因为把自己机器中的内容写出到服务器端 4、关闭资源         */        //创建客户端socket服务        Socket socket = new Socket("localhost", 10002);        //获取socket中的输出流        OutputStream os = socket.getOutputStream();        //使用输出流将指定的数据写出去        os.write("ewew".getBytes());//字节流别忘了 getBytes        //读取服务端返回的数据 使用socket读取流        InputStream is = socket.getInputStream();        byte[] buf = new byte[1024];        int len =is.read(buf);        String text = new String(buf, 0, len);        System.out.println(text);        //关闭资源        socket.close();//服务端接受客户端发来的数据并打印在控制台上        /*         * 建立tcp服务端的思路         * 1、创建服务端socket服务 通过ServerSocket对象         * 2、服务端必须对外提供一个端口 否则客户端无法连接         * 3、获取连接过来的客户端对象         * 4、通过客户端对象获取socket流 读取客户端发来的数据         *  并打印在控制台上         * 5、关闭资源 关客户端 关服务端         *           *          */         //1、创建服务端对象        ServerSocket ss= new ServerSocket(10002);        //2、获取连接过来的客户端对象        Socket s = ss.accept();        String name =  s.getInetAddress().getHostAddress();        String name1 =  s.getInetAddress().getHostName();        //3、通过socket对象获取输入流 要读取客户端发来的数据        InputStream in = s.getInputStream();        byte[] buf = new byte[1024];        int len =in.read(buf);        String text = new String (buf,0,len);        System.out.println(name+"..."+text+"..."+name1);        //使用客户端socket对象的输出流给客户端返回数据        OutputStream os = s.getOutputStream();        os.write("收到".getBytes());        s.close();        ss.close();
        /*         * 客户端输入字母数据 发送给服务端         * 服务端收到后显示在控制台 并将该数据转成大写返回给客户端         * 直到客户端输入over 结束         *          * 创建一个英文大写转换服务器         * 有客户端和服务端 tcp传输         */                 /*         * 转换服务器端         * 分析         * 1、serversocket服务         * 2、获取socket对象         * 3、源 socket 读取客户端发过来的需要转换的数据         * 4、目的 显示在控制台上         * 5、将数据转成大写发给客户端         * 6、         */        //1、        ServerSocket ss = new ServerSocket(10004);        //2、获取socket对象 通过服务器套接字获取套接字 自己新创的 没有服务器的功能        Socket s = ss.accept();        //获取ip        String ip = s.getInetAddress().getHostAddress();        System.out.println(ip+"...connected");        //3、获取socket读取流 并装饰        BufferedReader brin =  new BufferedReader(new InputStreamReader(s.getInputStream()));        //4、获取socket输出流并装饰        PrintWriter out = new PrintWriter(s.getOutputStream(),true);//缺少自动刷新无法及时返回        String line = null;        while((line=brin.readLine())!=null) {            System.out.println(line);            out.println(line.toUpperCase());;//          System.out.print("\r\n");//          out.flush();一般情况下阻塞了 即文字没读完 卡在服务器 就是缺少结束标记 换行和刷新         }        s.close();/*         * 思路:         * 客户端:         * 1,需要先有socket端点。         * 2,客户端的数据源:键盘。         * 3,客户端的目的:socket.         * 4,接收服务端的数据,源:socket。         * 5,将数据显示在打印出来:目的:控制台.         * 6,在这些流中操作的数据,都是文本数据。         *          *          * 转换客户端:         * 1,创建socket客户端对象。         * 2,获取键盘录入。         * 3,将录入的信息发送给socket输出流。         */        //1,创建socket客户端对象。        Socket s = new Socket("192.168.1.100",10004);        //2,获取键盘录入。        BufferedReader bufr  =                new BufferedReader(new InputStreamReader(System.in));        //3,socket输出流。//      new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));        PrintWriter out = new PrintWriter(s.getOutputStream(),true);        //4,socket输入流,读取服务端返回的大写数据        BufferedReader bufIn  = new BufferedReader(new InputStreamReader(s.getInputStream()));        String line = null;        while((line=bufr.readLine())!=null){            if("over".equals(line))                break;//          out.print(line+"\r\n");//          out.flush();            out.println(line);            //读取服务端发回的一行大写数。            String upperStr = bufIn.readLine();            System.out.println(upperStr);        }        s.close();
Socket s = new Socket("localhost", 10010);        BufferedReader br = new BufferedReader(new FileReader("client.txt"));        PrintWriter out = new PrintWriter(s.getOutputStream(), true);        String line = null;        while ((line = br.readLine()) != null) {            out.println(line);        }        out.println("over");        //告诉 服务端 客户端写完了 通过一个方法        s.shutdownOutput();        //可以用时间戳作为标记        // 4、读取socket 读取客户端上传后服务器返回的信息        BufferedReader brIn = new BufferedReader(new InputStreamReader(s.getInputStream()));        String str = brIn.readLine();        System.out.println(str);        br.close();        s.close();    ServerSocket ss = new ServerSocket(10010);        Socket s = ss.accept();        String ip =  s.getInetAddress().getHostAddress();        System.out.println(ip);        BufferedReader brIn = new BufferedReader(new InputStreamReader(s.getInputStream()));        BufferedWriter bw = new BufferedWriter(new FileWriter("server.txt"));        String line = null;        while((line = brIn.readLine())!=null) {//          if("over".equals(line))//提示读取完全了结束写入 上传完成//              break;            bw.write(line);            bw.newLine();            bw.flush();        }        PrintWriter out = new PrintWriter(s.getOutputStream(),true);        out.println("上传ok");        s.close();        ss.close();        bw.close();