互联网地址:
又称IP地址,是IP协议提供的一种统一的地址格式,它为互联网的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址差异。(从技术角度讲,每个互联网地址代表着一台主机与底层的通信信道 的连接,换句话说,就是一个网络接口)
端口号:tcp协议和UDP协议使用的地址,叫做端口号,都是用来区分同一主机不同应用程序的
协议:相当于相互通信的程序达成的一种约定,它规定了分组报文的交换方式和它们包含的意义,一组协议规定了分组报文的结构以及怎样对报文所包含的信息进行解析
客户端:或者用户端,是指与服务器端相对应的,为客户提供本地服务的程序,一般安装在普通的客户端机子上
服务器:是指某些高性能的计算机,能通过网络,向外提供服务,相当于普通PC来说,稳定性,安全性,性能等放面都要求更高
TCP,udp业务流程是什么,差别在哪里,功能
TCP客户端:
1, 创建一个socket实例:构造函数向指定的远程主机和端口建立一个tcp连接
通过套接字的输入输出流进行通信,一个socket连接实例,包括一个Intputstream和outputsteam,它们的用法同于其他的java输入输出流
2, 使用socket类中的close()方法关闭连接
Tcp客户端
1, 创建一个serverSocket实例并制定本地端口,此套接字的功能是侦听该端口收到的连接。
2, 重复执行 a.调用serversocket的accept()方法以获取一个客户端的连接,基于新建路的客户端连接,创建一个socket实例,并有accept()访问 b.使用所返回的Inputstream和outputstream,与客户端连接通信 c.通信完毕后,使用socket类的close()方法关闭改客户端的套接字连接
Udp客户端:
3, 创建一个datagramsocket实例,对本地地址和端口进行设置
4, 使用datagramsocket类中的send() receive()方法来发送和接受datagramSocket实例进行通信
5, 通信完毕,使用datagramsocket类中的close()来销毁该套接字
6, 服务器端:
7, 创建一个datagramsocket实例,对本地地址和端口进行设置此时服务器已经准备好从任何客户端接受数据报文
8, 使用receive()方法来接受一个datagramsocket实例,当receive()方法返回时,数据报文就包含了客户端的地址,这样我们便知回复信息该送到哪里
9, 使用datagramsock类中的send()和receive()方法来发送和接受datagramsocket实例,进行通信
功能:tcp:java为tcp提供两个类socket和serverSocket类,一个类代表tcp的一端,一个tcp连接一条抽象的双向的通信,来那边分别有IP地址和端口号确定
Udp在ip协议基础上添加另一层的地址
对数据传输过程中可能产生数据错误进行检测,并抛出已经选坏的数据
差别:
Udp套接字在使用前不需要进行连接tcp协议和电话通信协议,而udp协议则与通信相似
另一个不同点是他们对信息的边界处理方式不同,udp套接字保留了边界信息
Udp协议所提供的端到端的数据传输协议,提供了一个可信赖的字节流服务,一个ycp/ip流套接字与代表了tcp连接的一端,数据报套接字使用udp协议,提供了一个尽力而为的数据报服务,应用程序可以通过它发送最长6500字节的个人信息
Java多线程线程池,线程和线程池之间的关系
Java多线程:为Thread类定义了一个run()方法的子类,在run()方法中包含要执行的任务并实例这个子类
定义一个runnable接口的类,并在run()方法中包含要执行的任务,再次这个类的一个实例传递一个实例传递给thead的构造函数
线程和线程池的关系
每个线程都会消耗系统资源,随着线程数的添加,线程消耗越来越多的系统资源,可能添加客户端总服务时间,为了避免这个问题,与为这个链接创建一个新的线程不同,服务器在启动时创建一个由固定数量线程组成的线程池,当一个新的客户端连接请求传入服务器,他将给线程池中的一个线程处理,当该线程处理完这额客户端后,又返回线程池,并为下次处理做准备
综述:阻塞与超时
阻塞:socket 的i/o调用可能会由多种原因而组建
1, 数据输入方法read()receive()在无数据可读
2, Tcp套接字的write方法在没有足够的空间缓存传输数据时可能阻塞
3, serverSocket的accept()方法和socket的构造函数都会阻塞等待
4, 长信息往返时间高错误率的连接慢速的服务器。都可能导致需要很长的时间建立连接。
超时:
Socket很多的i/o操作如果不能立即完成就会阻塞等待,读操作将阻塞等待直到至少有一个字节可读,接收操作将阻塞等待直到成功建立连接,不幸的是阻塞的时间没有限制,可以为各种操作指定一个最大阻塞时间
getTimeout和setTimeout()方法分别用于获取和设置读接数据操作以及accept操作的最长阻塞时间,超时设置为0表示该操作永不过时,如果阻塞超时长,则抛出异常88
单播和组播的区别多播和单播只要区别是地址的形式,一个单播地址指向一组接收者单发送者和多播数据报文设置了初始化的ttl值
多播和单播接受者唯一的重要区别是,多播接收者表明希望那个多播地址接收数据来加入多播组。