Socket注意点
- SO_TIMETOUT socket每次读写最多花费的毫秒数
socket.setSoTimeout(10000); //10秒不能读到数据或者写出数据,SocketTimeoutException.
- Socket的关闭
try with Resource 或者传统的 close if not null.
关闭Socket时,相关连的输入输出流、通道也会关闭,所以不用单独关闭。 - read()
read方法返回一个int值,但是有效值仅为字节。 - 32位无符号大端二进制数
4个字节,高位字节处在低地址,所以通过流读取32为无符号二进制数时,读取的第一个字节对应高位。 - 输出流中换行
\r\n - 输出流
输出完毕时.flush - 构造函数
Socket(host,port);//构造的过程中建立活动的网络连接 Socket();//构造但不连接,可以进行个性化定制。
- 状态变量
socket.isClosed();//true:曾经连接过,现在关闭了 socket.isConned();//true:连接过(远程端),但不一定现在仍然连接 socket.isBound();//true:绑定过(本地端),但现在不一定绑定,对serverSocket起作用。
- socket当前是否连接
socket.isConnected() && !socket.isClosed()
- Socket选项
TCP_NODELAY:确保数据尽快发送,(缓冲会让数据的发送相对较慢)
SO_TIMEOUT:确保从读流和写流的阻塞时间不会超过固定的毫秒数。
SO_REUSEADDR:一个刚刚释放的Socket的端口可以给别的应用程序用。(可能还有传送到相应端口的数据没被读。)