Socket实际是传输层供给应用层的编程接口 。传输层则在网络层的基础上提供进程到进程问的逻辑通道,而应用层的进程则利用传输层向另一台主机的某一进程通信 。Socket就是应用层与传输层之间的桥梁
使用Socket编程可以开发客户机和服务器应用程序,可以在本地网络上进行通信,也可通过Internet在全球范围内通信 。

文章插图

文章插图
生活案例1如果你想写封邮件发给远方的朋友,如何写信、将信打包,属于应用层 。信怎么写,怎么打包完全由我们做主;而当我们将信投入邮筒时,邮筒的那个口就是套接字,在进入套接字之后,就是传输层、网络层等(邮局、公路交管或者航线等)其它层次的工作了 。我们从来不会去关心信是如何从西安发往北京的,我们只知道写好了投入邮筒就OK了 。
生活案例2:可以把Socket比作是一个港口码头,应用程序只要将数据交给Socket,就算完成了数据的发送,具体细节由Socket来完成,细节不必了解 。同理,对于接收方,应用程序也要创建一个码头,等待数据的到达,并获取数据 。
简述基于TCP和UDP的Socket编程的主要步骤
JAVA分别为TCP和UDP 两种通信协议提供了相应的Socket编程类,这些类存放在java.net包中 。与TCP对应的是服务器的ServerSocket和客户端的Socket,与UDP对应的是DatagramSocket 。
基于TCP创建的套接字可以叫做流套接字,服务器端相当于一个监听器,用来监听端口 。服务器与客服端之间的通讯都是输入输出流来实现的 。基于UDP的套接字就是数据报套接字,• 两个都要先构造好相应的数据包 。
基于TCP协议的Socket编程的主要步骤
服务器端(server):
1. 构建一个ServerSocket实例,指定本地的端口 。这个socket就是用来监听指定端口的连接请求的 。
2. 重复如下几个步骤:
a. 调用socket的accept()方法来获得下面客户端的连接请求 。通过accept()方法返回的socket实例,建立了一个和客户端的新连接 。
b. 通过这个返回的socket实例获取InputStream和OutputStream,可以通过这两个stream来分别读和写数据 。
c. 结束的时候调用socket实例的close()方法关闭socket连接 。
客户端(client):
1.构建Socket实例,通过指定的远程服务器地址和端口来建立连接 。
2.通过Socket实例包含的InputStream和OutputStream来进行数据的读写 。
3.操作结束后调用socket实例的close方法,关闭 。

文章插图
UDP
服务器端(server):
1. 构造DatagramSocket实例,指定本地端口 。
2. 通过DatagramSocket实例的receive方法接收
DatagramPacket.DatagramPacket中间就包含了通信的内容 。
3. 通过DatagramSocket的send和receive方法来收和发DatagramPacket.
客户端(client):
1. 构造DatagramSocket实例 。
2. 通过DatagramSocket实例的send和receive方法发送DatagramPacket报文 。
3. 结束后,调用DatagramSocket的close方法关闭 。
异常处理:下列哪种异常是检查型异常,需要在编写程序时声明()
A.NullPointerException
B.ClassCastException
C.FileNotFoundException
D.IndexOutOfBoundsException
答案:C
分析:NullPointerException空指针异常
ClassCastException类型转换异常
IndexOutOfBoundsException索引超出边界的异常
以上这些异常都是程序在运行时发生的异常,所以不需要在编写程序时声明
Java出现OutOf MemoryError(OOM 错误)的原因有哪些?出现OOM错误后,怎么解决?
答:OutOf MemoryError这种错误可以细分为多种不同的错误,每种错误都有自身的原因和解决办法,如下所示:
java.lang.OutOfMemoryError: Java heap space
错误原因:此OOM是由于JVM中heap的最大值不满足需要 。
解决方法:1) 调高heap的最大值,即-Xmx的值调大 。2) 如果你的程序存在内存泄漏,一味的增加heap空间也只是推迟该错误出现的时间而已,所以要检查程序是否存在内存泄漏 。
java.lang.OutOfMemoryError: GC overhead limit exceeded
错误原因:此OOM是由于JVM在GC时,对象过多,导致内存溢出,建议调整GC的策略,在一定比例下开始GC而不要使用默认的策略,或者将新代和老代设置合适的大小,需要进行微调存活率 。
解决方法:改变GC策略,在老代80%时就是开始GC,并且将-XX:SurvivorRatio(-XX:SurvivorRatio=8)和-XX:NewRatio(-XX:NewRatio=4)设置的更合理 。
推荐阅读
- 红茶含有黄酮吗,英九红茶功效与作用
- 包含JS、CSS、React、浏览器等 前端经典面试题
- 羊肉汤要煮多久最好?
- 红茶含水分,青梅茶的功效及作用
- 红茶含有激素吗,青梅茶的功效与作用
- 红茶的vc含量,清基茶的功效和作用
- 一文读懂所有HTTP状态码含义
- 红茶含有物质及其功效,调味茶的作用和功效
- 红茶中VC含量,柿茶的功效与作用
- 白色污染的含义:白色污染的治理方法
