Java网络编程从入门到精通(17):Socket类的getter和setter办法[Java编程]
本文“Java网络编程从入门到精通(17):Socket类的getter和setter办法[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在Java类中,getter和setter办法占了很大的比重.由于Java中没有定义属性的关键字;因此,getter和setter办法用于得到和设置Java类的属性值;如getName和setName办法用于设置name属性的值.假如某个属性只有getter办法,那这个属性是只读的;假如只有setter办法,那么这个属性是只写的.在Socket类中也有很多这样的属性来得到和Socket相关的信息,以及对Socket对象的状况举行设置.
1、用于得到信息的getter办法
我们可以从Socket对象中得到3种信息.
1. 服务器信息
关于客户端来说,服务器的信息只有两个:IP和端口.Socket类为我们供应了3个办法来得到这两个信息.
(1) public InetAddress getInetAddress()
这个办法返回一个InetAddress对象.通过这个对象,可以得到服务器的IP、域名等信息.
Socket socket = new Socket("www.ptpress.com.cn", 80);
System.out.println(socket.getInetAddress().getHostAddress());
System.out.println(socket.getInetAddress().getHostName());
(2) public int getPort()
这个办法可以以整数情势得到服务器的端口号.
Socket socket = new Socket("www.ptpress.com.cn", 80);
System.out.println(socket.getInetAddress().getPort());
(3) public SocketAddress getRemoteSocketAddress()
这个办法是将getInetAddress和getPort办法结合在了一同;操纵这个办法可以同时得到服务器的IP和端口号.但这个办法返回了一个SocketAddress对象,这个对象只能作为connect办法的参数用于衔接服务器;而要想得到服务器的IP和端口号,必须得将SocketAddress转换为它的子类InetSocketAddress.
Socket socket = new Socket("www.ptpress.com.cn", 80);
System.out.println(((InetSocketAddress)socket.getRemoteSocketAddress()).getHostName());
System.out.println(((InetSocketAddress)socket.getRemoteSocketAddress()).getPort());
注意:以上3个办法都可以在调用Socket对象关闭后调用.它们所得到的信息在Socket对象关闭后仍旧有效.假如直接利用IP衔接服务器时,getHostName和getHostAddress的返回值是一样的;都是服务器的IP.
2. 本机信息
与服务器信息一样,本机信息也有两个:本地IP和绑定的本地端口号.这些信息也可以通过3个办法来得到.
(1) public InetAddress getLocalAddress()
这个办法返回了本机的InetAddress对象.通过这个办法可以得到本机的IP和机械名.当本机绑定了多个IP时,Socket对象利用哪一个IP衔接服务器,就返回哪个IP.假如本机利用ADSL上网,并且通过Socket对象衔接到Internet上的某一个IP或域名上(如www.ptpress.com.cn),则getLocalAddress将返回“ADSL衔接”所暂时绑定的IP;因此,我们可以通过getLocalAddress得到ADSL的暂时IP.
Socket socket = new Socket();
socket.connect(new InetSocketAddress("www.ptpress.com.cn", 80));
System.out.println(socket.getLocalAddress().getHostAddress());
System.out.println(socket.getLocalAddress().getHostName());
3. 用于传输数据的输入、输出流
输入、输出流在前面的章节已经被多次用到.在这里让我们来简单回想一下.
(1) public InputStream getInputStream() throws IOException
用于得到从服务器读取数据的输入流.它所得以的流是最原始的源.为了操作更便利,我们常常利用InputStreamReader和BufferedReader来读取从服务器传过来的字符串数据.
Socket socket = new Socket("www.ptpress.com.cn", 80);
InputStream inputStream = socket.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
System.out.println(bufferedReader.readLine());
(2) public OutputStream getOutputStream() throws IOException
用于得到向服务器发送数据的输出流.输出流可以通过OutputStreamWriter和BufferedWriter向服务器写入字符串数据.
Socket socket = new Socket("www.ptpress.com.cn", 80);
OutputStream outputStream = socket.getOutputStream();
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
bufferedWriter.write("你好");
bufferedWriter.flush();
注意:在利用OutputStream的write办法输出数据后,必须利用flush办法革新输出缓冲区,以便将输出缓冲区中的数据发送出去.假如要输出字符串,利用OutputStreamWriter和BufferedWriter都可以;它们的write办法都可以直接利用字符串作为参数来输出数据.而这一点与呼应的InputStreamReader和BufferedReader差别;它们中只有BufferedReader有readLine办法,因此,必须利用BufferedReader才能直接读取字符串数据.
以上是“Java网络编程从入门到精通(17):Socket类的getter和setter办法[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |