初入android之Socket实现数据通信:InetAddress篇

一、两台计算机进行网络通讯具备的条件

简单来说:地址、网络协议、端口号

  1. 要有地址,唯一的身份证和所在的位置
  2. 要有共同的语言,进行交流,就是网络协议
    TCP :Transmission Control Protocol传输控制协议
    IP : Internet Protocol 互联网协议
    菜鸟教程TCP/IP篇
  3. 一台主机上可以运行很多的应用程序,每个应用程序要有标识,也就是端口号(端口号范围0-65535,其中1-1023为系统所保留(Http,FTP等)http:80 ftp:21 telnet:23)

二、Socket

IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通讯链路的终结点,是TCP和UDP的基础,也是网路通信的基础菜鸟教程Socket篇

三、Java中的网络支持

针对网络通信的不同层次,java提供的网络功能有四大类(API)
1、InetAddress : 用于标识网络上的硬件资源。(IP地址相关的信息)详情见官方开发文档
2、URL :统一资源定位符,通过URL可以直接读取或写入网络上的数据
3、Sockets : 使用TCP协议实现网络通信的Socket相关的类
4、Datagram : 使用UDP协议,将数据保存在数据报中,通过网络进行通信

四、练习InetAddress常用方法

public class Test01 {
    public static void main(String[] args){

        try {
            //通过本地localHost来实例化InetAddress
            InetAddress address=InetAddress.getLocalHost();
            byte[] bytes =address.getAddress();//获取的是一个IP地址在内存中存在形式
            System.out.println("在内存中存储的IP:"+Arrays.toString(bytes));
            System.out.println("计算机的名称:"+address.getCanonicalHostName());
            System.out.println("计算机名字:"+address.getHostName());
            System.out.println("IP地址为:"+address.getHostAddress());
            
            //下面计算机名称跟IP地址是自己电脑的,我用*号代替
            //通过计算机名称来实例化InetAddress
            InetAddress inetAddress =InetAddress.getByName("*****");
            byte[] bytes1 =inetAddress.getAddress();//获取的是一个IP地址在内存中存在形式
            System.out.println("在内存中存储的IP:"+Arrays.toString(bytes1));
            System.out.println("计算机的名称:"+inetAddress.getCanonicalHostName());
            System.out.println("计算机名字:"+inetAddress.getHostName());
            System.out.println("IP地址为:"+inetAddress.getHostAddress());

            //通过IP地址来实例化InetAddress对象
            InetAddress address1 = InetAddress.getByName("***.***.*.*");
            byte[] bytes2 =address1.getAddress();//获取的是一个IP地址在内存中存在形式
            System.out.println("在内存中存储的IP:"+Arrays.toString(bytes2));
            System.out.println("计算机的名称:"+address1.getCanonicalHostName());
            System.out.println("计算机名字:"+address1.getHostName());
            System.out.println("IP地址为:"+address1.getHostAddress());

            //通过网络地址来实例化对象
            InetAddress address2 =InetAddress.getByName("www.baidu.com");
            byte[] bytes3 =address2.getAddress();//获取的是一个IP地址在内存中存在形式
            System.out.println("在内存中存储的IP:"+Arrays.toString(bytes3));
            System.out.println("计算机的名称:"+address2.getCanonicalHostName());
            System.out.println("计算机名字:"+address2.getHostName());
            System.out.println("IP地址为:"+address2.getHostAddress());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

五、AndroidStudio执行main方法报错

点击这里查看解决方法
(感谢穷格万物,如有冒犯,请告知删除)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值