<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-fareast-font-family:宋体; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:10.0pt; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt; mso-ascii-font-family:Calibri; mso-fareast-font-family:宋体; mso-hansi-font-family:Calibri; mso-font-kerning:0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->
一、构造 Socket
Socket()--- 构造 Socket 对象,但不建立连接,需要用 bind(SocketAddress) 绑定到本地地址,再调用 connect ( SocketAddress ) 与远程主机建立连接。
以下构造方法均建立与远程主机的连接
Socket(InetAddress address,int port) throws UnknownHostException,IOException
Socket(InetAddress address,int port,InetAddress localAddr,int localPort) throws IOException
Socket(String host,String port) throws UnknownHostException,IOException
Socket(String host,String port,InetAddress localAddr,int loaclPort) throws IOException
二、获取 Socket 的信息
1 、 getInetAddress() 获得远程服务器的 IP 地址
2 、 getPort() 获得远程服务其的端口
3 、 getLocalAddress ()获得客户本地的 IP 地址
4 、 getLocalPort ()获得客户本地的端口
5 、 getInputStream(): 获得输入流,若 socket 没有连接、已经关闭、调用 shutdownInput (),则抛出 IOException
6 、 getOutputStream() 获得输出流,若 socket 没有连接、已经关闭、调用 shutdownOutput (),则抛出 IOException
三、关闭 Socket
1 、 socket.close();
2 、 socket 状态测试方法
isClosed(): 若 Socket 已经建立连接,并且还没有关闭, return true 否则 return false
isConnected(): 若 Socket 曾经连接 到远程主机,则返回 true ,否则返回 false
isBound(): 若 socket 已经与一个本地端口绑定,则返回 true ,否则返回 false
四、判断一个 Socket 对象是否处于连接状态
boolean isConnected =socket.isConnected()&&!socket.isClosed();
五、半关闭 Socket
进程 A 告诉进程 B 所有数据已经输出完毕的方法
1 、当进程 A 与 B 交换的是字符流,并且一行一行的读写时,可以事先约定一个特殊的标志作为结束标志
2 、进程 A 先发送一个消息,告诉进程 B 所发送的正文的长度,然后再发送正文。进程 B 先获取进程 A 将发送的正文的长度,接下来只要读取完该长度的字节或字符就停止
3 、进程 A 发完所有数据后,关闭 Socket 。当进程 B 读取完所有的数据后,再调用 read (返回 -1 )获取 readLine( 返回 null) 则已到达输入流的末尾
4 、可采用半关闭方法:关闭输入流 ---shutdownInput ,关闭输出流 ---shutdownOutput
isInputShutdown ()输入流是否关闭
isOutputShutdown() 输出流是否关闭
六、设置 Socket 的选项
1 、 TCP_NODELAY: 表示立即发送数据。布尔类型
2 、 SO_REUSERADDR: 表示是否允许重用 Socket 所绑定的本地地址。布尔类型
3 、 SO_TIMEOUT :表示接收数据的等待超时时间。整形
4 、 SO_LINGER :表示当执行 socket 的 close 方法时,是否立即关闭底层的 Socket
5 、 SO_SNFBUF :表示发送数据的缓冲区大小
6 、 SO_RCVBUF :表示接收数据的缓冲大小
7 、 SO_KEEPALIVE :表示对于长时间处于空闲状态的 Socket ,是否要自动将其关闭
8 、 OOBINLINE: 表示是否支持发送一个字节的 TCP 紧急数据
七、服务类型选项
IP 规定了 4 中服务类型,用来定性描述服务的质量
1 、低成本
2 、高可靠性
3 、最高吞吐量
4 、最小延迟
Socket 类用 4 个整数表示服务类型
1 、低成本: 0x02
2 、高可靠性: 0x04
3 、最高吞吐量: 0x08
4 、最小延迟: 0x10
设置服务类型: setTrafficClass
读取服务类型: getTrafficClass