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

    网络编程

    InetAddress获取ip地址

    package cn.edu.yulinu.demo;
    
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    /*
     * 表示互联网的IP地址
     * java.net.InetAddress
     * 静态方法
     * static InetAddress getLocalHost()
     * 返回本地主机
     */
    public class InetAddressDemo {
        public static void main(String[] args) throws UnknownHostException {
            function();
            function1();
        }
        /*
         * 拿自己ip
         */
        public static void function() throws UnknownHostException {
            InetAddress localHost = InetAddress.getLocalHost();
            System.out.println(localHost);
        }
        /*
         * 拿别人ip
         */
        public static void function1() throws UnknownHostException {
            InetAddress inet = InetAddress.getByName("stxf.yulinu.edu.cn");
            System.out.println(inet);
        }
    }

    udp接收和发送

    UDPSend

    package cn.edu.yulinu.demo1;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.net.UnknownHostException;
    
    /*
     * 实现UDP协议的发送端
     * 实现我们封装数据的类java.net.DatagramPacket 将数据包包装
     * 实现数据书传输的类ajva.net.DatagramSocket 将数据包发送出去
     * 
     * 实现步骤:
     * 1:创建DatagramPacket对象,封装数据,接收地址和端口
     * 2:创建DatagramSocket
     * 3:调用DatagramSocket
     */
    public class UDPSend {
        
        public static void main(String[] args) throws IOException {
            //1:创建DatagramPacket对象,封装数据,接收地址和端口
            byte[] date ="你好UDP".getBytes();
            InetAddress inet = InetAddress.getByName("127.0.0.1");
            DatagramPacket dp = new DatagramPacket(date, date.length, inet, 6000);
            //2:创建DatagramSocket
            DatagramSocket ds = new DatagramSocket();
            //3:调用DatagramSocket
            ds.send(dp);
            //关闭资源
            ds.close();
        }
        
    }

    UDPReceive

    package cn.edu.yulinu.demo1;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    import java.util.Arrays;
    
    /*
     * 实现UDP接收端
     * 实现封装数据博爱java.net.DatagramPacket将数据接收
     * 实现输出传输java.net.DatagramSocket接收数据包
     * 实现步骤:
     * 1:创建DatagramSocket对象,绑定端口号 要和发送端口号一致
     * 2:创建字节数组,接收发来的数据
     * 3:创建数据包对象DatagramPacket
     * 4:调用DatagramSocket对象方法receive(DatagramPacket dp)接收数据,数据放在数据包中
     * 5:拆包(发送的IP地址,接收到的字节数组,发送方的端口号)
     */
    public class UDPReceive {
        public static void main(String[] args) throws IOException {
            //创建数据包传输对象DatagramSocket绑定端口号
            DatagramSocket ds = new DatagramSocket(6000);
            //创建字节数据,接收数据
            byte[] data = new byte[1024];
            //拆个年间数据包对象传递字节数组
            DatagramPacket dp = new DatagramPacket(data, data.length);
            //调用ds对象方法receive传递数据包
            ds.receive(dp);
            int length = dp.getLength();
            System.out.println(new String(data,0,length));
            System.out.println(dp.getAddress().getHostAddress()+" "+dp.getPort());
            ds.close();
        }
    }

    TCP接收和发送

    TCPServer

    package cn.edu.yulinu.demo3;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /*
     * 实现TCP服务器程序
     * 表示服务器程序的类java.net.ServerSocket
     * 构造方法:
     * ServerSocket(int port)传递端口号
     * 
     * 很重要的事情,必须要获得客户端套接字对象
     * Socket accept()
     */
    public class TCPServer {
        public static void main(String[] args) throws IOException {
            //创建服务器端连接对象
            ServerSocket server = new ServerSocket(8888);
            //调用服务器套接字对象中的方法accept()获取客户端套接字对象
            Socket socket = server.accept();
            //通过客户端套接字对象,socket获取字节输入流,读取客户端发来的数据
            InputStream in = socket.getInputStream();
            byte[] date = new byte[1024];
            int len = in.read(date);
            System.out.println(new String(date,0,len));
            //服务器向客户端回数据,字节输出流,通过客户端套接字对象获取字节输出流
            OutputStream out = socket.getOutputStream();
            out.write("收到。谢谢".getBytes());
            socket.close();
            server.close();
        }
    }

    TCPClient

    package cn.edu.yulinu.demo3;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    /*
     * 实现TCP客户端,连接到服务器
     * 和服务器实现数据交换
     * 实现TCP客户端程序的类java.net.Socket
     * 构造方法
     * Socket(String host,int port)传递服务器IP和端口号
     * 注意:构造方法只要运行,就会和服务器进行连接,连接失败就抛出异常
     * OutputStream getOutputStream() 返回套接字输出流
     * 作用:将套接字输出,输出到服务器中
     * InputStrtem getInputStream()返回套接字输入流
     * 作用:从服务器端读取数据
     */
    public class TCPClient {
        public static void main(String[] args) throws  IOException {
            //创建Socket对象,连接数据库
            Socket socket = new Socket("127.0.0.1",8888);
            //通过客户端的套接字对象Socket方法,获取字节输出流,将数据写向服务器
            OutputStream out = socket.getOutputStream();
            out.write("服务器OK".getBytes());
            //读取服务器发回的数据,是信用socket套接字对象的字节输入流
            InputStream in = socket.getInputStream();
            byte[] data = new byte[1024];
            int len = in.read(data);
            System.out.println(new String(data,0,len));
            socket.close();
        }
    }

    TCP上传图片案例

    TCPServer

    package cn.edu.yulinu.demo4;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Random;
    
    /*
     * TCP图片上传服务器
     * 1:ServerSocket套接字对象,监听端口8000
     * 2:方法accept()获取客户端的连接对象
     * 3:客户端连接对象获取字节输入流,读取客户端发送图片
     * 4:创建一个File对象,绑定上传的文件夹
     *     判断文件夹是否存在,文件夹不存在就创建
     * 5:创建一个字节输出流,输出流的目的是File对象所在的文件夹
     * 6:字节流读取图片,字节流将图片写入到目的文件夹中
     * 7:将上传成功协会客户端
     * 8:关闭资源
     */
    public class TCPServer {
    
        public static void main(String[] args) throws IOException {
            ServerSocket server = new ServerSocket(8000);
            Socket socket = server.accept();
            //通过客户端连接对象,读取字节输入流,读取客户端图片
            InputStream in = socket.getInputStream();
            //将目的文件夹封装到File对象
            File upload = new File("images\upload");
            if(!upload.exists()) {
                upload.mkdirs();
            }
            //为了防止文件同名覆盖重新定义文件名
            //规则:域名+毫秒值+6位随机数
            String filename = "yulinu"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";
            //创建字节输出流,将图片写入到目的文件夹中
            FileOutputStream fos = new FileOutputStream(upload+File.separator+filename);
            //读写字节数组
            byte[] bytes = new byte[1024];
            int len = 0;
            while((len=in.read(bytes))!=-1) {
                fos.write(bytes, 0, len);
            }
            //通过客户端连接获取字节输出流
            //将上传成功写回
            socket.getOutputStream().write("上传成功".getBytes());
            fos.close();
            socket.close();
            server.close();
        }
    }

    TCPClient

    package cn.edu.yulinu.demo4;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    /*
     * 实现RCP图片上传案列
     * 实现步骤:
     * 1;socket套接字连接服务器
     * 2:通过socket获取字节输出流,目的是为了写图片
     * 3:使用自己的流对象,读取图片数据源
     *         FileInputStream
     * 4:读取图片使用字节输出流,将图片写道服务器
     *     采用字节数组做缓冲
     * 5:通过Socket套接字获取字节输入流
     * 读取服务器发回来的上传成功
     * 6:关闭资源
     */
    public class TCPClient {
    
        public static void main(String[] args) throws IOException{
            Socket socket = new Socket("127.0.0.1",8000);
            //获取字节输出流,将图片写到服务器中 
            OutputStream out = socket.getOutputStream();
            FileInputStream fis = new FileInputStream("e:\a.jpg");
            int len = 0;
            byte[] bytes = new byte[1024];
            while((len=fis.read(bytes))!=-1) {
                out.write(bytes,0,len);
            }
            //给服务器写终止序列
            socket.shutdownOutput();
            //获取字节输入流,获取服务器的上传成功
            InputStream in = socket.getInputStream();
            byte[] bytess = new byte[1024];
            len = in.read(bytess);
            System.out.println(new String(bytess,0,len));
            fis.close();
            socket.close();
        }
    }

    上传图片多线程改进版

    TCPClient

    package cn.edu.yulinu.demo4;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    /*
     * 实现RCP图片上传案列
     * 实现步骤:
     * 1;socket套接字连接服务器
     * 2:通过socket获取字节输出流,目的是为了写图片
     * 3:使用自己的流对象,读取图片数据源
     *         FileInputStream
     * 4:读取图片使用字节输出流,将图片写道服务器
     *     采用字节数组做缓冲
     * 5:通过Socket套接字获取字节输入流
     * 读取服务器发回来的上传成功
     * 6:关闭资源
     */
    public class TCPClient {
    
        public static void main(String[] args) throws IOException{
            Socket socket = new Socket("127.0.0.1",8000);
            //获取字节输出流,将图片写到服务器中 
            OutputStream out = socket.getOutputStream();
            FileInputStream fis = new FileInputStream("e:\a.jpg");
            int len = 0;
            byte[] bytes = new byte[1024];
            while((len=fis.read(bytes))!=-1) {
                out.write(bytes,0,len);
            }
            //给服务器写终止序列
            socket.shutdownOutput();
            //获取字节输入流,获取服务器的上传成功
            InputStream in = socket.getInputStream();
            byte[] bytess = new byte[1024];
            len = in.read(bytess);
            System.out.println(new String(bytess,0,len));
            fis.close();
            socket.close();
        }
    }

    Upload

    package cn.edu.yulinu.demo4;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Random;
    
    public class Upload implements Runnable {
    
        private Socket socket;
        
        public Upload(Socket socket) {
            this.socket=socket;
        }
        
        @Override
        public void run() {
            try {
            // TODO Auto-generated method stub
            //通过客户端连接对象,读取字节输入流,读取客户端图片
            InputStream in = socket.getInputStream();
            //将目的文件夹封装到File对象
            File upload = new File("images\upload");
            if(!upload.exists()) {
                upload.mkdirs();
            }
            //为了防止文件同名覆盖重新定义文件名
            //规则:域名+毫秒值+6位随机数
            String filename = "yulinu"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";
            //创建字节输出流,将图片写入到目的文件夹中
            FileOutputStream fos = new FileOutputStream(upload+File.separator+filename);
            //读写字节数组
            byte[] bytes = new byte[1024];
            int len = 0;
            while((len=in.read(bytes))!=-1) {
                fos.write(bytes, 0, len);
            }
            //通过客户端连接获取字节输出流
            //将上传成功写回
            socket.getOutputStream().write("上传成功".getBytes());
            fos.close();
            socket.close();
            }catch(IOException e) {
                
            }
        }
    
    }

    TCPThreadServer

    package cn.edu.yulinu.demo4;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TCPThreadServer {
        public static void main(String[] args) throws IOException {
            
            ServerSocket server = new ServerSocket(8000);
            while(true) {
                Socket socket =server.accept();
                new Thread(new Upload(socket)).start();
            }
        }
    }
    本人博客均是本人学习过程中的总结。
  • 相关阅读:
    锻炼意志力
    iOS 函数积累
    iOS8新特性 计算 cell 的高度
    iOS 国际化支持 设置
    CALayer 方法属性整理
    好的 blog 整理
    xcode7 打包上传至 app store
    ios 适配 (字体 以及 控件)
    iOS 适配设计与切图
    iOS app 切图
  • 原文地址:https://www.cnblogs.com/numberfive/p/9227578.html
Copyright © 2011-2022 走看看