美文网首页
Java26 TCP在Java中的实现

Java26 TCP在Java中的实现

作者: 第二套广播体操 | 来源:发表于2019-02-12 14:41 被阅读0次

    Socket 客户端 IO技术
    ServerSocket 服务端 IO技术
    可以使用转换流
    TCP客户端建立
    1 建立TCP服务
    2 因为是面向连接 就必须有连接才能进行通讯
    在创建客户端时,就必须明确目的地址和端口
    3 一但连接建立 就有了传输数据的通道 就可以通道中进行数据传输
    这个传输其实就是通过流实现的 需要io流
    4关闭资源

    public class TCP_test1 {
        public static void main(String[] args) throws IOException {
    //        创建客户端对象 明确服务端地址和端口
            System.out.println("TCP客户端1启动");
            Socket s=new Socket("192.168.1.6",10003);
    //        获取socket流中的输出流 将数据发送到服务端
          OutputStream os=s.getOutputStream();
    //      通过输出流写数据
          os.write("TCP客户端1正在传输".getBytes());
    //      接收来自服务端的数据
          InputStream is=s.getInputStream();
            byte[] bufin=new byte[1024];
            int len=is.read(bufin);
            String s1=new String(bufin,0,len);
            System.out.println(s1);
    //      关闭资源
            s.close();
    
        }
    }
    

    TCP服务端建立

    public class TCP_test1server {
        public static void main(String[] args) throws IOException {
    //       创建socket服务端服务
            System.out.println("TCP服务端1已启动");
    //        明确接收端端口
            ServerSocket ss=new ServerSocket(10003);
    //        获取客户端
          Socket s= ss.accept();
    //      调用客户端方法
          String ip= s.getInetAddress().getHostAddress();
            System.out.println(ip+"已接入");
    
    //      通过客户端对象获取socket流的读取流
            InputStream is=s.getInputStream();
            byte[] bufin=new byte[1024];
            int len=is.read(bufin);
            String s1=new String(bufin,0,len);
            System.out.println(s1);
            OutputStream os=s.getOutputStream();
    //      通过输出流写数据
            os.write("TCP服务端1进行反馈".getBytes());
    
            s.close();
            ss.close();
    
        }
    }
    

    TCP客户端向服务端上传文本
    IO流读取文本
    再调用socket方法进行上传

    public class TCP_test2 {
        public static void main(String[] args) throws IOException {
            System.out.println("TCP客户端2已启动");
    //        创建客户端服务 明确服务端地址 和 端口
            Socket s=new Socket("192.168.1.6",10004);
    //        源文件 文本
            File file=new File("D:\\IO\\TEST.txt");
          BufferedReader bufr=new BufferedReader(new FileReader(file));
    //        通过socket客户端调用输出流
    //      BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    //       一定要自动刷新 否则资源还在本地
            PrintWriter out=new PrintWriter(s.getOutputStream(),true);
    //       频繁读写
            String line=null;
            while ((line=bufr.readLine())!=null){
                out.println(line);}
            s.shutdownOutput();
            //      接收来自服务端的数据
            InputStream is=s.getInputStream();
            byte[] bufin=new byte[1024];
            int len=is.read(bufin);
            String s1=new String(bufin,0,len);
            System.out.println(s1);
    
            bufr.close();
            s.close();
        }
    }
    

    TCP服务端接收文本
    调用socket方法进行接收
    IO流将文本写入本地

    public class TCP_test2server {
        public static void main(String[] args) throws IOException {
            System.out.println("TCP2服务端已启动");
    //        创建TCP2服务端
            ServerSocket ss=new ServerSocket(10004);
    //        接收套接字
           Socket s= ss.accept();
    //       获取IP
           String ip=s.getInetAddress().getHostAddress();
    //      源 来自网络
            BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
    //        目的文本
         BufferedWriter bw=  new BufferedWriter(new FileWriter("D:\\IO\\net.server\\"+ip+" TEST.txt"));
    //       频繁读写
            String line=null;
            while ((line=br.readLine())!=null)
            {
                bw.write(line);
                bw.newLine();
            }
            OutputStream os=s.getOutputStream();
    //      通过输出流写数据
            os.write("TCP客户端2上传成功".getBytes());
            bw.close();
            s.close();
            ss.close();
        }
    }
    

    并发上传图片
    客户端

    public class TCP_test3 {
        public static void main(String[] args) throws IOException {
            System.out.println("TCP客户端3已启动");
            Socket s=new Socket("192.168.1.6",10005);
             BufferedInputStream bi=new BufferedInputStream(new FileInputStream("D:\\IO\\test.png"));
            OutputStream os=s.getOutputStream();
            byte[] bytes=new byte[1024];
            int len=0;
            while ( (len=bi.read(bytes))!=-1)
            {
                os.write(bytes,0,len);
            }
    //        发送完后 给服务端终止指令
            s.shutdownOutput();
    
            InputStream is=s.getInputStream();
            byte[] bufin=new byte[1024];
            int len1=is.read(bufin);
            String s1=new String(bufin,0,len1);
            System.out.println(s1);
             bi.close();
             s.close();
        }
    }
    

    服务端

    public class TCP_test3server {
        public static void main(String[] args) throws IOException {
            System.out.println("TCP服务端3已启动");
            ServerSocket ss=new ServerSocket(10005);
    //每次读取都需要重新接收一个新的客户端 并重新使用输入流
          while (true) {
              Socket s=ss.accept();//阻塞等待客户端
    //          将来访的客户端都封装到一个单独的线程中
    
              new Thread(new TCP_test3Runnable(s)).start();
    
          }
    //ss.close();
        }
    }
    
    public class TCP_test3Runnable implements Runnable {
        private Socket s;
    
        public TCP_test3Runnable(Socket s) {
            this.s = s;
        }
    
        @Override
        public void run() {
            String ip=s.getInetAddress().getHostAddress();
            BufferedInputStream bi= null;
            try {
                bi = new BufferedInputStream(s.getInputStream());
                int count = 1;
                File file = new File("D:\\IO\\net.server\\" + ip + " (" + count + ")test.png");
                while (file.exists()) {
                    count++;
                    file=new File("D:\\IO\\net.server\\" + ip + " (" + count + ")test.png");
                }
                System.out.println(file);
                BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(file));
                byte[] bytes = new byte[1024];
                int len = 0;
                while ((len = bi.read(bytes)) != -1)
                    bo.write(bytes, 0, len);
                OutputStream os = s.getOutputStream();
    //      通过输出流写数据
                os.write("TCP客户端3上传成功".getBytes());
                bo.close();
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    }
    

    相关文章

      网友评论

          本文标题:Java26 TCP在Java中的实现

          本文链接:https://www.haomeiwen.com/subject/spqkeqtx.html