美文网首页
Java之 网络编程

Java之 网络编程

作者: 测试员 | 来源:发表于2019-08-19 12:45 被阅读0次

    简单知识

    IP

    每台设备在网络中的唯一标识

    端口

    每个程序上在设备上的唯一标识
    ·MySQL:3306
    ·Oracle:1521
    ·Web:80
    ·Tomcat:8080
    ·QQ:4000

    协议

    UDP
    面向无连接,数据不安全,速度快;
    TCP(三次握手):面向连接,数据安全,速度慢;

    案例

    案例一 TCP发信息
        class TcpClint1 {
            public static void main(String[] args) throws IOException {
                //1.创建一个Socket客户端对象,绑定IP和端口
                Socket socket = new Socket("localhost", 8998);
        
                //2.获取网络字节输出流OutputStream对象
                OutputStream out = socket.getOutputStream();
        
                //3.给服务器发送数据
                out.write("哈漏哇!妮能煞累呀?".getBytes());
        
                //4.获取网络字节输入流对象InputStream对象
                InputStream in = socket.getInputStream();
        
                //5.读取服务器回写的数据
                byte[] arr = new byte[1024];
                int len = in.read(arr);
                System.out.println(new String(arr,0,len));
        
                //6.释放资源
                socket.close();
            }
        }
        
        /**
        * TCP服务器端:接收客户端请求,给客户端回写数据
        */
        class TcpServer {
            public static void main(String[] args) throws IOException {
                // 1.创建服务端Socket对象并绑定客户端端口
                ServerSocket serverSocket = new ServerSocket(8998);
        
                // 2.获取客户端 socket 对象
                Socket accept = serverSocket.accept();
        
                // 3.获取网络字节输入流对象InputStream对象
                InputStream in = accept.getInputStream();
        
                // 4.读取发送过来的数据
                byte[] arr = new byte[1024];
                int len = in.read(arr);
                System.out.println(new String(arr,0,len));
                // 5.获取网络字节输出流OutputStream对象
                OutputStream out = accept.getOutputStream();
        
                // 6.给客户端回写信息
                out.write("俺听不懂方言,谢谢!".getBytes());
                out.close();
                in.close();
            }
        }
    
    案例二 UDP发信息
        class UdpClint{
            public static void main(String[] args) throws IOException {
                int port = 8998;
        
                //发送内容
                String str = "俺是个没有感情的粉刷匠!";
                //创建接收/发送器对象
                DatagramSocket socket = new DatagramSocket();
                //创建装载对象
                DatagramPacket packet = new DatagramPacket(
                        str.getBytes(),
                        str.getBytes().length,
                        InetAddress.getByName("localhost"),
                        port);
                //发送
                socket.send(packet);
                //socket.close();
        
            }
        }
        
        
        class UdpServer{
            public static void main(String[] args) throws IOException  {
                int port = 8998;
        
                //创建接收/发送对象并绑定接收端口
                DatagramSocket socket = new DatagramSocket(port);
        
                //创建加载对象(构造用于接收长度为的数据包的数据包。长度参数必须小于或等于buf.length。)
                DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
        
                //接收信息
                socket.receive(packet);
        
                //打印出来
                int len = 0;
                byte[] arr = packet.getData();
                System.out.println(new String(arr,0,len));
                //socket.close();
            }
        }
    
    案例三 TCP上传文件
        class TcpClint {
            public static void main(String[] args) throws IOException {
        
        //        要上传的文件
                String src = "like.gif";
        //        创建本地字节输入流
                FileInputStream fin = new FileInputStream(src);
        
                Socket socket = new Socket("127.0.0.1", 777);
        //**********************************上传*****************************************************
                OutputStream os = socket.getOutputStream();
        
                int len = 0;
                byte[] arr = new byte[1024];
                while ((len = fin.read(arr)) != -1) {
                    os.write(arr, 0, len);
                }
        
            socket.shutdownOutput();
        //-------------------------------------下载服务器传过来的反馈数据---------------------------------
        /*
                InputStream in = socket.getInputStream();
                while ((len = in.read(arr)) != -1) {
                    System.out.println(new String(arr, 0, len));
                }*/
                os.close();
                socket.close();
                fin.close();
            }
        }
        /**
        * 服务端代码:文件下载到服务器上
        */
        class TcpServershangchuan {
            public static void main(String[] args) throws IOException {
        //        存储路径
                String mdd = "C:\\Users\\ASUS\\Desktop\\";
        //        绑定端口
                ServerSocket serverSocket = new ServerSocket(777);
        //        获取接收对象
                Socket socket = serverSocket.accept();
        //        获取网络字节输入流
                InputStream in = socket.getInputStream();
        //        本地字节输出流把文件下载下来
                FileOutputStream fout = new FileOutputStream(mdd + "b.gif");
        
        //        IO操作
                int len = 0;
                byte[] arr = new byte[1024];
                while ((len = in.read(arr)) != -1) {
                    fout.write(arr, 0, len);
                }
        
        //        返回给服务端一个信息可以不给
        //        socket.getOutputStream().write("上传成功".getBytes());
        
        //        资源释放
                fout.close();
                socket.close();
                serverSocket.close();
            }
        }
    

    相关文章

      网友评论

          本文标题:Java之 网络编程

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