java 网络编程
网络:使用光纤,网线,Wifi等传输介质,将位于不同的地址的计算机连接到一起 1、局域网 2、广域网(互联网)3、城域网
地址:计算机在网络上,什么东西是它的地址? IP地址, IP地址就是计算机在网络上的唯一绝对地址 ,相当于人居住的房子的地址.
计算机上面可以安装非常多的应用软件,那么如何区分这些软件?需要通过端口号来区分,端口号,相当与房子中开的们.
一、端口号在计算机里面有2个字节那么大,因此端口号的取值范围:0--65535 共65536个 但是1024以下的端口号,通常是计算机内置软件端口 类似于现实生活中的短号号码 120
110 119 ...
二、1024以上的我们都可以用,并且为了避免重复性,推荐大家端口号定义越大越好.
三、多个软件之间,如果使用同一种通讯协议,那么软件之间,端口号不允许重复. 但是不同协议,端口可以重复.
四、资源定位 URL:统一资源定位符 http://127.0.0.1:80/stusystem/user/1 URI:统一资源修饰符. user/1
五、数据的传输
1、计算机之间底层通过传输010101010100110010010这样的数据进行通讯,但是通讯时,如果识别有效数据,还是需要不同的协议才能完成,不然就会造成:鸡同鸭将的效果.
协议中,场景的底层协议:TCP/UDP
TCP/IP:非常类似于打电话,它是一种面向连接的协议. 他的特点:安全可靠但是效率相对UDP而言,较为低下 ---请求响应模式
UDP:类似于发短信,类似于广播,它是一种非面向连接的协议. 他的特点:不可靠,安全性较低, 但是它的效率较高.
2、数据在进行传输时,需要经过一系列的封装和拆分的过程.
1)、数据的封装.
2)、数据的拆分.
采用了分层的思想,来完成对层次的解耦,以及各层的职责分离,让各层能够合理分工合作. --OSI七层模型.
六、 客户端和服务器
C/S Client/Server (胖客户端) 特点:需要安装 需要更新.
B/S Browser/Server (瘦客户端) 特点:不需要安装,更不需要更新,服务器更新之后,打开浏览器,自动更新.
七、传输层的传输方式
需要解决到达计算机的OSI七层模型中的010101010100100这种二进制数据,如何才能到达我们的应用软件.
传输层的作用:就是建立一个数据传输通道,将来自于OSI七层模式中下三层的数据传输到我们应用程序中.
这个数据传输通道,我们把它称之为Socket接字,实际上,就类似于我们现实生活中的飞机场、食品厂、物流中的"传输履带",只不过他的特点是:可以双向传输.
作为传输层来讲,只有2种传输协议,TCP/IP(三次握手四次挥手),UDP.
TCP/IP:建立连接三次握手-----关闭连接四次挥手.
java.net:
ServerSocket Socket DatagramSocket DatagramPacket InetAddress URL URLConnection(HttpURLConnection) URLEncoder URLDecoder
getByName(String host):根据主机获取对应的InetAddress对象。该方法是静态方法。
getByAddress(byte[] address):根据原始IP地址获取对应的InetAddress对象。该方法是静态方法。
String getCanonicalHostName():获取此IP地址的全限定域名。
String getHostAddress():返回此IP地址对应的IP地址字符串。
String getHostName():返回此IP地址对应的主机名。
String getLocalHost():获取本地IP地址对应的InetAddress对象。
//获取本机的InetAddress对象
InetAddress addr = InetAddress.getLocalHost();
//获取本机的IP地址
System.out.println(addr.getHostAddress());
//获取本机的主机名
System.out.println(addr.getHostName());
//-------------------------------------
// 获得其他机器的InetAddress对象(根据IP地址)
//-------------------------------------
addr = InetAddress.getByName("192.168.1.122");
//获取机器的IP地址
System.out.println(addr.getHostAddress());
//获取机器的主机名
System.out.println(addr.getHostName()); //此时输出的IP地址,不是域名,也不是计算机的名称,
//如果我在getByName()这个方法中,输入的IP地址不存在或者是机器本身的DNS不允许进行IP地址与域名|(IP地址与机 器名) 之间的映射,
//那么.getHostName()这个方法直接返回的IP地址
//-------------------------------------
// 获得其他机器的InetAddress对象(根据域名)
//-------------------------------------
addr = InetAddress.getByName("www.baidu.com");
//获取机器的IP地址
System.out.println(addr.getHostAddress());
//获取机器的主机名
System.out.println(addr.getHostName()); //此时返回的就是域名 机器本身的DNS允许进行IP地址与域名
//-------------------------------------
// 获得其他机器的InetAddress对象(根据主机名)
//-------------------------------------
addr = InetAddress.getByName("IXEZUAQCXJ8BTAO");
//获取机器的IP地址
System.out.println(addr.getHostAddress());
//获取机器的主机名
System.out.println(addr.getHostName());