zoukankan      html  css  js  c++  java
  • TCP的网络编程基础

     

     

     

    服务器建立 ServerSocket 对象
    ServerSocket 对象负责等待客户端请求建立套接字连接,类似邮局某个窗口
    中的业务员。也就是说, 服务器必须事先建立一个等待客户请求建立套接字
    的 连接的ServerSocket 对象。
    所谓“接收”客户的套接字请求,就是accept()方法会返回一个 Socket 对象
    ServerSocket ss = new ServerSocket(9999);
    Socket s = ss.accept ();
    InputStream in = s.getInputStream();
    byte[] buf = new byte[1024];
    int num = in.read(buf);
    String str = new String(buf,0,num);
    System.out.println(s.getInetAddress().toString()+”:”+str);
    s.close();
    ss.close();

     

     



    /**
    * 实现TCP的网络编程
    * 例题3:从客户端发送文件给服务端,服务端保存到本地。并返回“发送成功”给客户端。
    * 并关闭相应的连接。
    * @author CH
    * @create 2021 下午 4:13
    */

    public class TCPTest3 {
    
        /*
            这里涉及到的异常,应该使用try-catch-finally处理
             */
        @Test
        public void client() throws IOException {
            //1.
            Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9090);
            //2.
            OutputStream os = socket.getOutputStream();
            //3.
            FileInputStream fis = new FileInputStream(new File("beauty.jpg"));
            //4.
            byte[] buffer = new byte[1024];
            int len;
            while((len = fis.read(buffer)) != -1){
                os.write(buffer,0,len);
            }
            //关闭数据的输出
            socket.shutdownOutput();
    
            //5.接收来自于服务器端的数据,并显示到控制台上
            InputStream is = socket.getInputStream();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] bufferr = new byte[20];
            int len1;
            while((len1 = is.read(buffer)) != -1){
                baos.write(buffer,0,len1);
            }
    
            System.out.println(baos.toString());
    
            //6.
            fis.close();
            os.close();
            socket.close();
            baos.close();
        }
    
        /*
        这里涉及到的异常,应该使用try-catch-finally处理
         */
        @Test
        public void server() throws IOException {
            //1.
            ServerSocket ss = new ServerSocket(9090);
            //2.
            Socket socket = ss.accept();
            //3.
            InputStream is = socket.getInputStream();
            //4.
            FileOutputStream fos = new FileOutputStream(new File("beauty2.jpg"));
            //5.
            byte[] buffer = new byte[1024];
            int len;
            while((len = is.read(buffer)) != -1){
                fos.write(buffer,0,len);
            }
    
            System.out.println("图片传输完成");
    
            //6.服务器端给予客户端反馈
            OutputStream os = socket.getOutputStream();
            os.write("你好,美女,照片我已收到,非常漂亮!".getBytes());
    
            //7.
            fos.close();
            is.close();
            socket.close();
            ss.close();
            os.close();
    
        }
    }

    **
     * 实现TCP的网络编程
     * 例子1:客户端发送信息给服务端,服务端将数据显示在控制台上
     *
     * @author CH
     * @create 2021 下午 3:30
     */
    public class TCPTest1 {
    
        //客户端
        @Test
        public void client()  {
            Socket socket = null;
            OutputStream os = null;
            try {
                //1.创建Socket对象,指明服务器端的ip和端口号
                InetAddress inet = InetAddress.getByName("192.168.14.100");
                socket = new Socket(inet,8899);
                //2.获取一个输出流,用于输出数据
                os = socket.getOutputStream();
                //3.写出数据的操作
                os.write("你好,我是客户端mm".getBytes());
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //4.资源的关闭
                if(os != null){
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
    
                }
                if(socket != null){
                    try {
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
    
                }
            }
    
    
    
        }
        //服务端
        @Test
        public void server()  {
    
            ServerSocket ss = null;
            Socket socket = null;
            InputStream is = null;
            ByteArrayOutputStream baos = null;
            try {
                //1.创建服务器端的ServerSocket,指明自己的端口号
                ss = new ServerSocket(8899);
                //2.调用accept()表示接收来自于客户端的socket
                socket = ss.accept();
                //3.获取输入流
                is = socket.getInputStream();
    
                //不建议这样写,可能会有乱码
    //        byte[] buffer = new byte[1024];
    //        int len;
    //        while((len = is.read(buffer)) != -1){
    //            String str = new String(buffer,0,len);
    //            System.out.print(str);
    //        }
                //4.读取输入流中的数据
                baos = new ByteArrayOutputStream();
                byte[] buffer = new byte[5];
                int len;
                while((len = is.read(buffer)) != -1){
                    baos.write(buffer,0,len);
                }
    
                System.out.println(baos.toString());
    
                System.out.println("收到了来自于:" + socket.getInetAddress().getHostAddress() + "的数据");
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(baos != null){
                    //5.关闭资源
                    try {
                        baos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(is != null){
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(socket != null){
                    try {
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(ss != null){
                    try {
                        ss.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
    
            }
    
    
    
    
    
        }
    
    }
    不积跬步,无以至千里;不积小流,无以成江海。
  • 相关阅读:
    OpenCascade Ray Tracing Rendering
    Create New Commands in Tcl
    OpenCascade Modeling Algorithms Fillets and Chamfers
    OpenCascade Modeling Algorithms Boolean Operations
    Construction of Primitives in Open Cascade
    Open Cascade Data Exchange STL
    Tcl Tk Introduction
    Open Cascade DataExchange IGES
    Netgen mesh library : nglib
    Hello Netgen
  • 原文地址:https://www.cnblogs.com/CCTVCHCH/p/14915405.html
Copyright © 2011-2022 走看看