Java网络编程从入门到精通(17):Socket类的getter和setter方法(1)

简介:
  Java 类中, get ter和 set ter方法占了很大的比重。由于 Java 中没有定义属性的关键字;因此, get ter和 set ter方法用于获得和设置 Java 类的属性值; getName setName方法用于设置name属性的值 。如果某个属性只有 get ter方法,那这个属性是只读的;如果只有 set ter方法,那么这个属性是只写的。在 Socket 类中也有很多这样的属性来获得和 Socket 相关的信息,以及对 Socket 对象的状态进行设置。
一、 用于获得信息的 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());
(2) public int getLocalPort()
通过这个方法可以得到Socket 对象所绑定的本机的一个端口号;如果未绑定端口号,则返回一个从1024 65,535 之间的随机数。因此,使用这个方法可能每次得到的端口号不一样。 
Socket socket  =   new  Socket();
//  如果使用下面的bind方法进行端口绑定的话,getLocalPort方法将返回100
//  socket.bind(new InetSocketAddress("127.0.0.1", 100));
socket.connect( new  InetSocketAddress( " www.ptpress.com.cn "   80 ));
System.out.println(socket.getLocalPort())
   (3) public SocketAddress getLocalSocketAddress()
这个方法和getRemoteSocketAddress 方法类似,也是同时得到了本地IP Socket 对象所绑定的端口号。如果要得到本地IP 和端口号,必须将这个方法的返回值转换为InetSocketAddress 对象。
Socket socket  =   new  Socket( " www.ptpress.com.cn " 80 );    
System.out.println(((InetSocketAddress)socket.getLocalSocketAddress()).getHostName());        
System.out.println(((InetSocketAddress)socket.getLocalSocketAddress()).getPort());
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才能直接读取字符串数据。




 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/214439 ,如需转载请自行联系原作者
相关文章
|
29天前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
49 9
|
15天前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
21天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
29天前
|
安全 Java API
深入探索Java网络编程中的HttpURLConnection:从基础到进阶
本文介绍了Java网络编程中HttpURLConnection的高级特性,包括灵活使用不同HTTP方法、处理重定向、管理Cookie、优化安全性以及处理大文件上传和下载。通过解答五个常见问题,帮助开发者提升网络编程的效率和安全性。
|
29天前
|
JSON 安全 算法
JAVA网络编程中的URL与URLConnection:那些你不知道的秘密!
在Java网络编程中,URL与URLConnection是连接网络资源的两大基石。本文通过问题解答形式,揭示了它们的深层秘密,包括特殊字符处理、请求头设置、响应体读取、支持的HTTP方法及性能优化技巧,帮助你掌握高效、安全的网络编程技能。
52 9
|
27天前
|
存储 安全 Java
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
68 5
|
24天前
|
安全 Java 调度
Java中的多线程编程入门
【10月更文挑战第29天】在Java的世界中,多线程就像是一场精心编排的交响乐。每个线程都是乐团中的一个乐手,他们各自演奏着自己的部分,却又和谐地共同完成整场演出。本文将带你走进Java多线程的世界,让你从零基础到能够编写基本的多线程程序。
32 1
|
5月前
|
网络协议 安全 Java
Java中的网络编程:Socket编程详解
Java中的网络编程:Socket编程详解
|
5月前
|
Java API 网络安全
Java网络编程入门
Java网络编程入门
|
5月前
|
网络协议 安全 Java
Java中的网络编程:Socket编程详解
Java中的网络编程:Socket编程详解