Socket类的getter和setter方法

本文深入解析Java Socket类中的getter方法和setter方法,详细介绍了如何通过Socket对象获取服务器和本地信息,以及如何设置Socket对象的状态。重点讨论了getInetAddress、getPort、getRemoteSocketAddress等方法用于获取服务器信息,getLocalAddress用于获取本地信息,以及InputStream、OutputStream用于数据传输的基本用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、域名等信息。


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> 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()

这个方法可以以整数形式获得服务器的端口号。


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> Socket socket  =   new  Socket( " www.ptpress.com.cn " 80 );
System.out.println(socket.getInetAddress().getPort());


    (3) public SocketAddress getRemoteSocketAddress()

这个方法是将getInetAddressgetPort方法结合在了一起;利用这个方法可以同时得到服务器的IP和端口号。但这个方法返回了一个SocketAddress对象,这个对象只能作为connect方法的参数用于连接服务器;而要想获得服务器的IP和端口号,必须得将SocketAddress转换为它的子类InetSocketAddress


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> 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


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> 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

用于获得从服务器读取数据的输入流。它所得以的流是最原始的源。为了操作更方便,我们经常使用InputStreamReaderBufferedReader来读取从服务器传过来的字符串数据。
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> 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

用于获得向服务器发送数据的输出流。输出流可以通过OutputStreamWriterBufferedWriter向服务器写入字符串数据。


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> 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才能直接读取字符串数据。

转载于:https://my.oschina.net/leoson/blog/104628

包名: ex.computer 名: Memory,Cpu,Mainboard, Computer, Factory Memory 内存,包含以下属性 type:型,例如"ddr""ddr2""ddr4"等 speed:速度,例如 1333\1600等 voltage:电压,例如"高电压""低电压" spec:规格,每条的容量,例如4\8\16 Cpu处理器,包含以下属性 cores:核心数,如1\2\4等 speed:速度,如2.5\3.5\4.0等 socket: 插槽型,例如"am3""fm1""Iga1155"等 Mainboard主板,包含以下属性 socketType:cpu插槽型,例如"am3""fm1""Iga1155"等 memoryType:内存型,例如"ddr""ddr2""ddr4"等memorySlotCount:内存条插槽数,如2,4,8等memoryCapacity: 最大支持内存容量,如2,4,8,32等 Computer电脑,包含以下属性: 一块主板 Mainboard mainboard。 组内存:Memory [] memories 个处理器:Cpu cpu; 一个"开机"方法:public void start()} 这个方法打印欢迎信息,然后打印该电脑的配置单,需要显示cpu的全部属性,内存总量,内存条数量,内存型,格式可以自定义 Factory组装工厂,包含一个方法 public static Computer makeComputer(Mainboard mainboard, Memory [] memories, Cpu cpu){这个方法返回一个 Computer 实例,组成 computer的配件都在圆括号中。 注意:Cpu 插槽主板插槽型不匹配返回 null 内存type 主板内存型不匹配返回 null 单条内存容量大于主板最大支持内存容量返回 null 2、为前四个添加构造方法每个域的gettersetter,包括初始化全部属性的构造方法默认无参的构造方法,注意,初始化全部属性的构造方法用于测试,很重要。3、完成后,确认所有属性名称,题干一致,导入测试包并测试无误。包含以上几个,并做一个主
03-24
第三周 的初步、cpu主板、内存的定义、的组合使用。 目的:掌握中定义域方法的方式、定义构造函数(有参数/无参数)。的组合。 需要:课上已经讲过相关内容并有课堂练习。 内容:导入项目后完成 1、定义内存、cpu主板。在指定项目中完成包名:ex.computer 名:Memory,Cpu,Mainboard, Computer, Factory Memory 内存,包含以下属性 |type :型,例如"ddr"\"ddr2"\"ddr4”等 speed:速度,例如1333\1600等 voltage:电压,例如"高电压"\"低电压” spec:规格,每条的容量,例如4\8\16 Cpu 处理器,包含以下属性 cores:核心数,如1\2\4等 speed:速度,如2.5\3.5\4.0等 socket:插槽型,例如”am3"\"fm1"\"lga1155”等 Mainboard主板,包含以下属性 socketType:cpu插槽型,例如"am3"\"fm1"\"lga1155"等 memoryType:内存型,例如"ddr"\"ddr2"\"ddr4”等 memorySlotCount:内存条插槽数,如2,4,8等 memoryCapacity:最大支持内存容量,如2,4,8,32等 Computer电脑,包含以下属性: -块主板 Mainboard mainboard.组内存:Memory []memories个处理器:Cpu cpu; 个“开机”方法:public void start(){} 这个方法打印欢迎信息,然后打印该电脑的配置单,需要显示cpu的全部属性,内存总量内存条数量,内存型,格式可以自定义 Factory 组装工厂,包含一个方法 public static ComputermakeComputer(Mainboardmainboard,Memory [ memories,Cpu cpu){} 这个方法返回一个Computer实例,组成computer的配件都在圆括号中。|注意:Cpu插槽主板插槽型不匹配返回null 内存type主板内存型不匹配返回null 单条内存容量大于主板最大支持内存容量返回null 若给定内存条数量大于主板支持内存条数,则以主板支持为准。 2、为前四个添加构造方法每个域的gettersetter,包括初始化全部属性的构造方法默认无参的构造方法,注意,初始化全部属性的构造方法用于测试,很重要。 3、完成后,确认所有属性名称,题干一致,导入测试包并测试无误。
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值