网络编程

面向应用层的类:
URL
URLConnection
面向传输层的类:
TCP协议相关类:Socket、ServerSocket
UDP协议相关类:DatagramPacket、DatagramSocket、MulticastSocket
面向网络层的类
表示IP 地址的类: InetAddress

获取InetAddrss对象方法
public static InetAddress getByName(String host)
host:主机地址的域名或IP地址。
public static InetAddress getLocalHost() 获取本地主机ip地址。
InetAddress常用方法
public String getHostAddress():获得本对象的IP地址
public String getHostName(): 获得本对象的主机名。

Socket通信程序基本结构都一样,包括以下四个基本步骤:

1、在客户方和服务器方创建Socket/ServerSocket实例。
2、打开连接到Socket的输入/输出流。
3、利用输入/输出流,按照一定的协议对Socket进行读/写操作。
4、关闭输入/输出流和Socket。
通常,程序员的主要工作是针对所要完成的功能在第3步进行编程,第1、2、4步对所有的通信程序来说几乎都是一样的。

TCP编程

public class TCPClient {
    public static void main(String[] args) {
        try {
            // 新建TCP的socket
            Socket socket = new Socket("192.168.1.183", 20000);
            // 获取输出流
            OutputStream os = socket.getOutputStream();
            // 发送数据
            os.write("你好漂亮".getBytes());
            // 获取输入流
            InputStream is = socket.getInputStream();
            // 读取数据
            byte[] buf = new byte[1024];
            int li = is.read(buf);
            // 输出读取的数据
            System.out.println(new String(buf, 0, li));
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
public class TCPServer {
     public static void main(String[] args){
         try {
             //新建TCP的服务器Socket
            ServerSocket server=new ServerSocket(20000);
            //ServerSocket等待连接
            Socket socket=server.accept();
            //获取连接的IP地址
            String ip=socket.getInetAddress().getHostAddress();
            System.out.println(ip+"...connection");

            //获取输入流
            InputStream is=socket.getInputStream();;
            byte[] buf=new byte[1024];
            //接收数据
            int len=is.read(buf);
            System.out.println(new String(buf,0,len));
            //获取输出流
            OutputStream os=socket.getOutputStream();
            //发送数据
            os.write("谢谢你".getBytes());
            socket.close();
            server.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
     }
}

UDP编程

public class UDPClient {
    public static void main(String[] args) {
        DatagramSocket socket = null;
        Scanner sc = new Scanner(System.in);
        try {// UDP的Socket
            socket = new DatagramSocket();
            System.out.println("请开始聊天:");

            String date = sc.nextLine();
            while (!"bye".equals(date)) {
                // 要发送的数据
                byte[] buf = date.getBytes();
                // 创建UDP数据包
                DatagramPacket dp = new DatagramPacket(buf, buf.length,
                        InetAddress.getByName("192.168.1.183"), 10000);
                // 发送数据
                socket.send(dp);

                date = sc.nextLine();

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sc.close();
            socket.close();
        }
    }
}
public class UDPServer {
    public static void main(String[] args) {
        try {
            // UDP的Socket
            DatagramSocket socket = new DatagramSocket(10000);
            // 存放要接收的数据的缓冲区
            byte[] buf = new byte[1024];
            // 新建UDP的数据包
            DatagramPacket dp = new DatagramPacket(buf, buf.length);
            while (true) {
                // 接收UDP的数据
                socket.receive(dp);// 阻塞
                // 将从Socket获取的数据变成字符串
                String data = new String(dp.getData(), 0, dp.getLength());
                // 输出获取的字符串
                InetAddress ip = dp.getAddress();
                System.out.println(ip.getHostAddress() + "/"
                        + ip.getHostAddress() + "say:" + data);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

URL

public class URLDemo {
    public static void main(String[] args){
        String addr="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2835357568,2173739438&fm=116&gp=0.jpg";
        FileOutputStream fos=null;
        InputStream in=null;

        try {
            URL url=new URL(addr);//url表示要操作的远程资源
            fos=new FileOutputStream("D:\\test.jpg");
            in=url.openStream();//打开输入流
            //读取远程资源,并通过输出流输出到本地文件中去
            byte[] buf=new byte[1024];

            int size=0;
            while((size=in.read(buf))!=-1){
                fos.write(buf, 0, size);
            }
            fos.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
       //关闭输入流
            if(in!=null)
            try {
                in.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
            //关闭输出流
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}

参考博客:http://blog.sina.com.cn/s/blog_6213b4e50100je4g.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值