zoukankan      html  css  js  c++  java
  • TCP通信练习2---6

    客户端:数据来自于键盘录入,直到输入的数据是886,发送数据结束
    服务器:接收到的数据在控制台输出
    package com.inetTes01;
    /*
    客户端:数据来自于键盘录入,直到输入的数据是886,发送数据结束
    */
    
    
    import java.io.*;
    import java.net.Socket;
    
    public class ClientDemo01 {
        public static void main(String[] args) throws IOException {
            //创建客户端Socket对象
            Socket s = new Socket("192.168.18.6", 10000);
    //        数据来自于键盘录入,直到输入的数据是886,发送数据结束
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            //封装输出流对象
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            String line;
            while ((line = br.readLine()) != null) {
                if("886".equals(line)) {
                    break;
                }
    //            //获取输出流对象
    //            OutputStream os = s.getOutputStream();
    //            os.write(line.getBytes());
                bw.write(line);
                bw.newLine();
                bw.flush();
            }
            //释放资源
            s.close();
    
    
        }
    }



    package com.inetTes01;
    /*
    服务器:接收到的数据在控制台输出
     */
    
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerDemo01 {
        public static void main(String[] args) throws IOException {
            //创建服务器Socket对象
            ServerSocket ss = new ServerSocket(10000);
            //监听客户端的连接返回一个对应的Socket对象
                Socket s = ss.accept();
    
                //获取输入流
    //        InputStream is = s.getInputStream();
    //        InputStreamReader isr = new InputStreamReader(is);
    //        BufferedReader br = new BufferedReader(isr);
                BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    
                String line;
                while ((line = br.readLine())!= null) {
                    System.out.println(line);
                }
            
    
            //ss.close();
    
        }
    }

     练习3 客户端与练习2相同

    服务器端,将接受的数据写入文件

    package com.inetTes01;
    /*
    服务器:接收到的数据写入文本文件
     */
    
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerDemo02 {
        public static void main(String[] args) throws IOException {
            //创建服务器Socket对象
            ServerSocket ss = new ServerSocket(10002);
    
            //监听客户端连接,返回对应的Socket对象
            Socket s = ss.accept();
    
            //获取输入流,读数据
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            //创建输出流对象
            BufferedWriter bw = new BufferedWriter(new FileWriter("IDEA_Test\s.txt"));
            String line;
            while ((line = br.readLine()) != null) {
                bw.write(line);
                bw.newLine();
                bw.flush();
            }
    
            ss.close();
            bw.close();
            br.close();
    
    
        }
    }

     练习4.服务器端与练习三相同。

    客户端,数据来自于文本文件

    package com.inetTes01;
    
    /*
            客户端:数据来自于文本文件
     */
    
    import java.io.*;
    import java.net.Socket;
    
    public class ClientDemo02 {
        public static void main(String[] args) throws IOException {
    //创建Socket对象
            Socket s = new Socket("192.168.18.6",10003);
    
            //封装输出流,写数据
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    
            //数据来自于文本文件,读取文本文件,然后写入bw数据
            //封装文本文件的数据
            BufferedReader br = new BufferedReader(new FileReader("IDEA_Test\diamond.txt"));
    
            String line;
            while((line = br.readLine())!= null) {
                bw.write(line);
                bw.newLine();
                bw.flush();
            }
    
            s.close();
            br.close();
    
    
    
    
        }
    }

    练习5
    ●客户端: 数据来自于文本文件,接收服务器反馈
    ●服务器: 接收到的数据写入文本文件,给出反馈
    ●出现问题: 程序- -直等待
    ●原因: 读数据的方法是阻塞式的
    ●解决办法: 自定义结束标记;使用shutdownOutput(方法(推荐)

    客户端代码

    package com.inetTes01;
    
    /*
            客户端:数据来自于文本文件
     */
    
    import java.io.*;
    import java.net.Socket;
    
    public class ClientDemo02 {
        public static void main(String[] args) throws IOException {
            //创建Socket对象
            Socket s = new Socket("192.168.18.6", 10005);
    
            //封装输出流,写数据
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    
            //数据来自于文本文件,读取文本文件,然后写入bw数据
            //封装文本文件的数据
            BufferedReader br = new BufferedReader(new FileReader("IDEA_Test\diamond.txt"));
    
            String line;
            while ((line = br.readLine()) != null) {
                bw.write(line);
                bw.newLine();
                bw.flush();
            }
            //自定义结束标记
    //        bw.write("886");
    //        bw.newLine();
    //        bw.flush();
            s.shutdownOutput();
    
            //接收反馈:相当于读取数据
            BufferedReader bwClient = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String x = bwClient.readLine();
            System.out.println(x);
            s.close();
            br.close();
            bwClient.close();
        }
    }

    服务器端

    package com.inetTes01;
    /*
    服务器:接收到的数据写入文本文件
     */
    
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerDemo02 {
        public static void main(String[] args) throws IOException {
            //创建服务器Socket对象
            ServerSocket ss = new ServerSocket(10005);
    
            //监听客户端连接,返回对应的Socket对象
            Socket s = ss.accept();
    
            //获取输入流,读数据
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            //创建输出流对象
            BufferedWriter bw = new BufferedWriter(new FileWriter("IDEA_Test\s.txt"));
            String line;
            while ((line = br.readLine()) != null) {
    
                bw.write(line);
                bw.newLine();
                bw.flush();
            }
    
    
            //服务器给出反馈相当于写入数据
            BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            bwServer.write("文件上传成功");
            bwServer.newLine();
            bwServer.flush();
    
    
    
            bwServer.close();
            ss.close();
            bw.close();
    
    
    
    
        }
    }

     

     客户端和练习5一样

    服务器如下:

    package com.inetTes01;
    /*
    服务器
    。 接收到的数据写入文本文件,给出反馈,代码用线程进行封装,为每一个客户端开启一个线程
    
     */
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerDemo03 {
        public static void main(String[] args) throws IOException {
            //创建服务器Socket对象
            ServerSocket ss = new ServerSocket(10007);
    
            while (true) {
    
                ////监听客户端连接,返回一个对应的Socket对象
                Socket s = ss.accept();
    
                //为每一个客户端开启一个线程
                new Thread(new ServerThread(s)).start();
            }
    //        ss.close();    //因为要进行死循环,所以不需要释放资源了
    
    
        }
    }

    线程类如下:

    package com.inetTes01;
    
    import java.io.*;
    import java.net.Socket;
    
    public class ServerThread implements Runnable {
        private Socket s;
    
        public ServerThread(Socket s) {
            this.s = s;
        }
    
        @Override
        public void run() {
            //接收数据写到文本文件
            //封装输入流,读数据 ,封装输出流,写数据到文件上
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    //            BufferedWriter bw = new BufferedWriter(new FileWriter("IDEA_Test\s.txt"));
    
                //为了解决接收多次文件的名称冲突问题
                int count = 0;
    
                File file = new File("IDEA_Test\s" + count + ".txt");
                while (file.exists()) {
                    count++;
                    file = new File("IDEA_Test\s" + count + ".txt");
                }
                BufferedWriter bw = new BufferedWriter(new FileWriter(file));
    
                String line;
                while ((line = br.readLine()) != null) {
                    bw.write(line);
                    bw.newLine();
                    bw.flush();
                }
                //给出反馈
                BufferedWriter Serverback = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                Serverback.write("文件上传成功啦");
                Serverback.flush();
                s.close();
                bw.close();
    
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    //
    
    
        }
    }
  • 相关阅读:
    [leetCode]09.用两个栈实现队列
    ubuntu:无法获得锁;无法锁定管理目录
    [leetCode]07.重建二叉树
    [leetCode]剑指 Offer 06. 从尾到头打印链表
    [leetCode]剑指 Offer 05. 替换空格
    [leetCode]1330.翻转子数组得到最大的数组值
    [leetCode]312.戳气球
    UVALive
    CodeChef
    CodeChef
  • 原文地址:https://www.cnblogs.com/lsswudi/p/11440399.html
Copyright © 2011-2022 走看看