星空网 > 软件开发 > Java

java.net.Socket用法详解

一、Socket构造方法

Socket() 
Socket(InetAddress address, int port) throws UnknowHostException, IOException 
Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException 
Socket(String host, int port) throws UnknowHostException, IOException 
Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException 

 

除了第一个不带参数的构造方法以外, 其他构造方法都会试图建立与服务器的连接, 如果连接成功, 就返回 Socket对象; 如果因为某些原因连接失败, 就会抛出IOException .

 

二、Socket常用方法

getInetAddress();      远程服务端的IP地址
getPort();          远程服务端的端口
getLocalAddress()      本地客户端的IP地址
getLocalPort()        本地客户端的端口
 
getInputStream();     获得输入流,同时返回一个InputStream对象实例。
getOutStream();      获得输出流,同时返回一个OutputStream对象实例。
值得注意的是,在这些方法里面,最重要的就是getInputStream()和getOutputStream()了。
 
注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。
 

三、Socket状态

isClosed();            //连接是否已关闭,若关闭,返回true;否则返回false
isConnect();      //如果曾经连接过,返回true;否则返回false
isBound();            //如果Socket已经与本地一个端口绑定,返回true;否则返回false
如果要确认Socket的状态是否处于连接中,下面语句是很好的判断方式。
 
boolean isConnection=socket.isConnected() && !socket.isClosed();  //判断当前是否处于连接

 
半关闭Socket
很多时候,我们并不知道在获得的输入流里面到底读多长才结束。下面是一些比较普遍的方法:
  • 自定义标识符(譬如下面的例子,当受到“bye”字符串的时候,关闭Socket)
  • 告知读取长度(有些自定义协议的,固定前几个字节表示读取的长度的)
  • 读完所有数据
  • 当Socket调用close的时候关闭的时候,关闭其输入输出流

四、Socket参数选项

  • TCP_NODELAY:  表示立即发送数据

  • SO_RESUSEADDR:  表示是否允许重用socket所绑定的本地地址

  • SO_TIMEOUT :  表示接收数据时的等待超时时间 。 单位为毫秒,默认值为0 , 表示永远等待。

  • SO_LINGER:  表示当执行 socket的close方法的时候,是否立即关闭底层的socket 。 这个单位是秒。

  • SO_SNFBUF:  发送数据的缓冲区大小

  • SO_RCVBUF:  接收数据的缓冲区大小

  • SO_KEEPLIVE:  表示对于长时间处于空闲状态的socket,是否要自动把他关闭

  • OOBINLINE: 表示是否支持发送一个字节的tcp紧急数据

  • backlog : 输入连接指示(对连接的请求)的最大队列长度被设置为 backlog 参数。如果队列满时收到连接指示,则拒绝该连接。

 

备注:具体各参数选项的讲解下一个分析说明

 

参考来源:

  http://my.oschina.net/u/725800/blog/303634

  http://www.cnblogs.com/rond/p/3565113.html

  



 



原标题:java.net.Socket用法详解

关键词:.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

美区Tik Tok小店&亚马逊卖家:怎么做好网红营销,找什么样的红人性价比最高?:https://www.kjdsnews.com/a/1783197.html
如何获得更多 TWITTER 关注者:https://www.kjdsnews.com/a/1783198.html
深圳大卖深陷泥潭,重组或破局?:https://www.kjdsnews.com/a/1784169.html
案例分析:100%由人工智能生成的作品无法获得版权保护:https://www.kjdsnews.com/a/1784170.html
10年老外贸分享如何高效使用海关数据开发国外客户:https://www.kjdsnews.com/a/1784171.html
一文带你了解境外投资备案(Overseas Direct Investment):https://www.kjdsnews.com/a/1784172.html
去日本入住酒店,东西随意用却有一个特殊“要:https://www.vstour.cn/a/411241.html
中国有哪些著名的酒店品牌。:https://www.vstour.cn/a/411242.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流