网络编程概念
IP与端口
IP地址用于唯一的标识网络中的一个通信实体,一个通讯实体可以有多个通讯程序同时提供网络服务端口就是应用程序与外界交流的出入口。
ip地址是数字型的,它是一个32位整数,通常为了便于记忆,把它分为4个8位的二进制,用圆点隔开。NIC统一负责全球Internet IP地址的规划管理,APNIC负责亚太地区的ip管理,它的总部设置在日本东京大学。Ip地址被分为几个大类,
A类:10.0.0.0~10.255.255.255
B类:172.16.0.0~172.31.255.255
C类:192.168.0.0~192.168.255.255
InetAddress
java提供了InetAddress类来代表IP地址,该类没有提供构造器,而是提供了两个静态方法来获取实例对象。
getByName(String host);//根据主机获取对象的InetAddress对象
getByAddress(byte[] addr);//根据原始ip地址获取对象的InetAddress对象
InetAddress ip = InetAddress.getByName("www.baidu.com");
InetAddress local = InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 });
InetAddress提供了如下方法获取实例的ip和主机名
ip.isReachable(2000);//ip是否可达,由于防火墙可能阻塞
local.getCanonicalHostName();//获取此ip地址的全限定域名
ip.getHostAddress();//获取InetAddress的实例ip字符串
ip.getHostName();//获取主机名
URLEncoder和URLDecoder
URLEncoder和URLDecoder用于完成普通字符串和application/x-www-form-urlencoded MIME
字符串之间的相互转换,当URL地址里包含非拉丁字符的字符串时,系统会将这些字符串转换成MIME字符串,实际上这并不是乱码。
URLEncoder.encode(String str,String encode)//将普通字符串转换为特殊字符串。
URLDecoder.decode(String str,String encode)//反之。
对于中文来说就是一个中文转换为两个十六进制,进行转换时要指定字符集。
httpClient访问时经常会在参数中带一些特殊字符,这时就会需要用到URLEncoder.encode方法,将参数改造。
String ctiTelUrl = "http://htcti.shypwl.net/api/exec.jsonx?json=";
//模拟 JsonObject paramJson = {"command":"dial","src":"6001","dest":"018358451175","biz_uuid":"uuidabcdef",ext_field:"random"};
HttpClientUtils.get(ctiTelUrl + URLEncoder.encode(paramJson.toJSONString(), "UTF-8"), 10000);
Ipv4与Ipv6
Ipv4与Ipv6是两个不版本的互联网协议
v4更为普及,ip是32位的地址空间,也就是最多有2的32次方的电脑可以联到Internet上。近二十年来由于互联网的蓬勃发展,IP位址的需求量愈来愈大,
IPv6是下一代互联网的协议,它的提出最初是因为随着互联网的迅速发展,IPv4定义的有限地址空间将被耗尽,地址空间的不足必将妨碍互联网的进一步发展,Ipv6应运而生。但我国在这方面技术发展十分缓慢。原因如下:
1、由于两个协议差别太大了,而目前v4还没有糟糕到完全不能用的程度,不管是硬件厂商还是ISP都没有动力去换v6地址。
2、NAT等网络协议,很好的解决了公网IP地址不足的问题,延迟了对IPv6的需求。假如世界上有百分之一的IP地址都使用NAT的话,基本上就相当于把现有的地址数量翻倍了。
NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,
InetAddress两个最重要的静态方法:
InetAddress inetAddress=InetAddress.getByName("Lc");
InetAddress inetAddress=InetAddress.getLocalHost();
String hostAddress=inetAddress.getHostAddress();//获取本地主机的IP地址
在IP地址后加上”/“符号以及1-32的数字,其中1-32的数字表示子网掩码中网络标识位的长度
如:192.168.1.1/24 的子网掩码也可以表示为255.255.255.0
子网掩码一般为255.255.255.0
子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
通过子网掩码,就可以判断两个IP在不在一个局域网内部。
子网掩码可以看出有多少位是网络号,有多少位是主机号
129.168.1.1/24 这个24就是告诉我们网络号是24位,24个1
172.16.10.33/27 中的/27,27个1
TCP与UDP
UDP像邮寄的包裹,虽然一次运输多个,但每个包裹都有“界限”,一个一个签收, 所以无粘包、半包问题。
还没有评论,来说两句吧...