Java——TCP案例演示

Java——TCP案例演示,第1张

Java——TCP案例演示

目录
      • 案例演示:客户端键盘录入服务器控制台输出
      • 案例演示:客户端键盘录入服务器写到文本文件
      • 案例演示:客户端读取文本文件服务器控制台输出
      • 案例演示:TCP协议上传文本文件(客户端读取文本文件发送数据到服务器端,服务器端读取数据存储到文本文件中)
      • 案例演示:TCP上传文本文件并给出反馈
      • 案例演示:多客户端上传文件,多线程改进

案例演示:客户端键盘录入服务器控制台输出

客户端

public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket sk = new Socket("192.168.15.100", 9999);
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while (true){
            System.out.println("请输入发送的消息");
            String msg = reader.readLine();
            //获取通道中输出流
            OutputStream out = sk.getOutputStream();
            out.write(msg.getBytes());
            if("886".equals(msg)){
                break;
            }
        }
        //释放资源
        sk.close();
    }
}

服务端

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器开启,等待连接.....");
        Socket sk = ss.accept();
        while (true){
            InputStream in = sk.getInputStream();
            //获取客户端ip
            String ip = sk.getInetAddress().getHostAddress();
            byte[] bytes = new byte[1024];
            int len = in.read(bytes);
            String s = new String(bytes, 0, len);
            System.out.println("IP:" + ip + "-给你发来消息:" + s);
            if("886".equals(s)){
                break;
            }
        }
        ss.close();
    }
}
案例演示:客户端键盘录入服务器写到文本文件

客户端

public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket sk = new Socket("192.168.15.100", 9999);
        OutputStream out= sk.getOutputStream();
        //包装通道中的字节流,包装成字符流
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String line=null;
        while ((line=reader.readLine())!=null){
            System.out.println("请输入内容");
            writer.write(line);
            writer.newline();
            writer.flush();
            if("886".equals(line)){
                break;
            }
        }
        sk.close();
    }
}

服务端

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器开启,等待连接.....");
        Socket sk = ss.accept();
        InputStream in = sk.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        BufferedWriter writer = new BufferedWriter(new FileWriter("msg.txt"));
        String line=null;
        while ((line=reader.readLine())!=null){
            if("886".equals(line)){
                break;
            }
            writer.write(line);
            writer.newline();
            writer.flush();
        }
        writer.close();
        ss.close();
    }
}
案例演示:客户端读取文本文件服务器控制台输出

客户端

public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket sk = new Socket("192.168.15.100", 9999);
        OutputStream out = sk.getOutputStream();
        //包装通道中的字节流,包装成字符流
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        BufferedReader reader = new BufferedReader(new FileReader("msg.txt"));
        String line = null;
        while ((line = reader.readLine()) != null) {
           writer.write(line);
           writer.newline();
           writer.flush();
        }
        sk.close();
    }
}

服务端

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器开启,等待连接.....");
        Socket sk = ss.accept();
        InputStream in = sk.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String line=null;
        while ((line=reader.readLine())!=null){
            System.out.println(line);
        }
        ss.close();
    }
}
案例演示:TCP协议上传文本文件(客户端读取文本文件发送数据到服务器端,服务器端读取数据存储到文本文件中)

客户端

public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket sk = new Socket("192.168.15.100", 9999);
        OutputStream out = sk.getOutputStream();
        //包装通道中的字节流,包装成字符流
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        BufferedReader reader = new BufferedReader(new FileReader("msg.txt"));
        String line = null;
        while ((line = reader.readLine()) != null) {
           writer.write(line);
           writer.newline();
           writer.flush();
        }
        reader.close();
        sk.close();
    }
}

服务端

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器开启,等待连接.....");
        Socket sk = ss.accept();
        InputStream in = sk.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        BufferedWriter writer = new BufferedWriter(new FileWriter("msg2.txt"));
        String line=null;
        while ((line=reader.readLine())!=null){
            writer.write(line);
            writer.newline();
            writer.flush();
        }
        writer.close();
        ss.close();
    }
}
案例演示:TCP上传文本文件并给出反馈

客户端

public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket sk = new Socket("192.168.15.100", 9999);
        OutputStream out = sk.getOutputStream();
        //包装通道中的字节流,包装成字符流
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        BufferedReader reader = new BufferedReader(new FileReader("msg.txt"));
        String line = null;
        while ((line = reader.readLine()) != null) {
           writer.write(line);
           writer.newline();
           writer.flush();
        }
      

        // void shutdownOutput ()
        // 禁用此套接字的输出流。
        sk.shutdownOutput();
        //读取服务端的反馈
        InputStream in = sk.getInputStream();
        byte[] bytes = new byte[1024];
        int len = in.read(bytes); //读取不到,服务端的反馈,就阻塞了
        String string = new String(bytes, 0, len);
        System.out.println(string);
        reader.close();
        sk.close();
    }
}

服务端

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器开启,等待连接.....");
        Socket sk = ss.accept();
        InputStream in = sk.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        BufferedWriter writer = new BufferedWriter(new FileWriter("msg4.txt"));
        String line=null;
        while ((line=reader.readLine())!=null){
           
            writer.write(line);
            writer.newline();
            writer.flush();
        }
        //下不来
        //上传成功后,给客户端要给反馈
        OutputStream out= sk.getOutputStream();
        out.write("上传成功".getBytes());
        writer.close();
        ss.close();
    }
}
案例演示:多客户端上传文件,多线程改进

客户端

public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket sk = new Socket("192.168.15.100", 9999);
        OutputStream out = sk.getOutputStream();
        //包装通道中的字节流,包装成字符流
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        BufferedReader reader = new BufferedReader(new FileReader("msg.txt"));
        String line = null;
        while ((line = reader.readLine()) != null) {
           writer.write(line);
           writer.newline();
           writer.flush();
        }
        // void shutdownOutput ()
        // 禁用此套接字的输出流。
        sk.shutdownOutput();
        //读取服务端的反馈
        InputStream in = sk.getInputStream();
        byte[] bytes = new byte[1024];
        int len = in.read(bytes); //读取不到,服务端的反馈,就阻塞了
        String string = new String(bytes, 0, len);
        System.out.println(string);
        reader.close();
        sk.close();
    }
}

服务端

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器开启,等待连接.....");
        int i=1;
        //循环侦听客户端
        while (true){
            Socket sk = ss.accept();
            System.out.println((i++)+"个客户端连接上了");
            //为每一个连接上来的客户端,单独开启一个线程去处理
            new UpLoadThread(sk).start();
        }
    }
}

多线程

public class UpLoadThread extends Thread {
    private Socket sk;

    public UpLoadThread(Socket sk) {

        this.sk = sk;
    }

    @Override
    public void run() {
        try {
            //我们应该为每一个连接上来的客户端,单独开启一个线程去处理
            InputStream in = sk.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            //文件名,随机取,防止覆盖
            BufferedWriter writer = new BufferedWriter(new FileWriter(System.currentTimeMillis()+"msg4.txt"));
            String line = null;
            while ((line = reader.readLine()) != null) {
                writer.write(line);
                writer.newline();
                writer.flush();
            }
            //上传成功后,给客户端要给反馈
            OutputStream out = sk.getOutputStream();
            out.write("上传成功".getBytes());
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5671417.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存