A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

名词解释--
】网络通信协议:在网络上进行连接和通信的规则叫做网络通信协议,现在应用最广泛的就是TCP/IP协议,这个协议是一组通信协议的集合体,大概包括TCP协议、IP协议、UDP协议等等。
】TCP/IP网络模型:分为四层-应用层(对数据的具体应用,如http,ftp),传输层(有连接和无连接传输,就是TCP和UDP),网络层(将数据分组打包),数据链路层(物理设备的驱动、接口)
】IP地址和端口号:用来区分每个计算机的标识,主要有IPv4(4个字节,也就是32位的的二进制)和IPv6(16个字节,也就是128位的二进制)两个版本,而IP地址指定计算机之后,访问目标计算机的应用程序需要指定端口号(两个字节,也就是16位的二进制,十进制取值范围0-65535),用户的普通程序要指定1024及以上的端口号,因为1024以下的端口基本被知名的应用程序占用,windows系统下可以在命令行窗口中输入netstat -ano 查看端口信息,也可以通过管道("|"竖线)和findstr命令查找指定内容,如netstat -ano | findstr "172"

InetAddress类--
】作用:主要用来获取给定IP或者主机名的InetAddress对象,InetAddress对象可以用来获取计算机的IP地址和主机名,并对这个主机地址进行一些检测,另一个最主要的作用是作为Socket编程(网络编程)的构造函数的参数
】主要使用的方法:主要使用其中的静态方法(因为InetAddress类没有构造方法,只能通过直接使用类名首字母大写调用其中的静态方法返回InetAddress实例对象,【这个地方使用了单例设计模式】),和其中的getHostName()和getHostAddress()方法

UDP--
】特点:无连接的通信协议(类似于广播通信,不管听众,只用发出信号),消耗资源少,通信效率高,经常用于音频,视频数据的传输,但是会出现偶尔丢包的情况,所以不能保证数据的完整性和顺序,不能用来传输重要的数据,并且传输模式是数据报模式,就是类似于广播

UDP编程涉及到的两个类DatagramPacket和DatagramSocket--
】作用:DatagramPacket用来封装UDP通信中发送或者接收的数据,DatagramSocket用来创建UDP通信的发送端和接收端
】两者之间的联系是:DatagramSocket中的send()和receive()【注:receive()方法会导致程序阻塞,等待对方发送数据过来】方法需要DatagramPacket对象作为参数,才能进行完整的UDP通信,所以,使用UDP通信的时候,需要先打开接收端,然后打开发送端,这时接收端才能收到数据,反之,接收不到,这类似于没有回播功能的那种电视节目,一旦错过播出时间,就没法看到之前的电视节目了

TCP--
】特点:有连接的通信协议(在进行正常通信之前,必须先建立起客户端和服务端的连接,并且连接只能由客户端向服务器端发出,服务器端需要事先启动,并一直阻塞等待客户端的连接请求,当连接建立好了之后,才能进行正常的通信),和UDP相对而言,消耗资源多,不会丢包,能保证数据的完整性和顺序,传输模式是流模式,需要IO流才能进行数据的传输

TCP编程涉及到的两个类ServerSocket和Socket--
】作用:ServerSocket用来创建服务端,Socket用来创建客户端
】使用方法:ServerSocket类中有个常用方法accept()【注:accept()方法会导致程序阻塞,等待客户端发出连接请求,然后才会返回一个Socket对象用来和客户端进行接下来的通信】,Socket类因为是通过IO流进行通信,所以getInputStream()和getOutputStream()这两个方法就解决了服务器端和客户端的通信问题。如果是客户端的Socket调用getInputStream()方法,那么就是从服务器端得到数据,调用getOutputStream()方法,那么就是向服务器端写入数据。
】注意点:因为TCP网络编程涉及到IO流,客户端的IO流必须关闭(可以逐个关闭输入输出流,也可以直接关闭Socket,这时JVM会自动帮我们关闭输入输出流),不然会出现Connection reset异常,同时服务器端必须一直等待着多个客户端的访问,所以必须要使用whlie(true)死循环让服务器端一直处在运行的状态(如果有其他处理方法,欢迎补充讨论),这个运行状态指的是处理了客户端的请求之后,服务器端仍然处于阻塞监听状态,死循环需要包裹住除了new ServerSocket(7777)之外的所有逻辑处理代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马