客户端Socket
2015-07-10 17:25
211 查看
下面有关于一下Socket的面试题跟大家分享一下:
1:创建Socket对象需要至少指定哪些信息?
创建Socket对象至少要指定IP(域名)和端口号,代码如下:
2:请写出使用Socket链接服务器(IP:192.168.17.100,端口号:8080)以及与服务端交互的Java代码。
这个问题就是要考察应聘者是否了解Socket的使用方法。与服务器交互实际上就是从服务器读取数据以及向服务器写数据。在解答本题时选择一种类型的数据作为例子。例如字符串,但要注意本题的考点,向服务端写数据时要使用flush方法刷新缓冲区的数据。在使用完流和Socket连接后要记得关闭掉它。
代码如下:
扩展知识:
哪些情况会关闭socket
有四种:
1直接调用socket.close();
2只要InputStream和OutPutStream有一个关闭,则网络链接自动关闭,(必须通过ImputStream.close方法和OutputStream.close方法关闭流,才能使网络自动关闭)。
3在程序退出时网络自动关闭。
4将Socket对象设为null或者在Socket对象未被释放的情况下被新的Socket对象覆盖后,由Dalivk虚拟机垃圾回收器回收为Socket对象分配的内存控件时自动关闭。
虽然这四种方法都可以达到同样的目的,但一个健壮的网络程序最好的是使用1、2中方法关闭网络链接,因为3、4中方法一般不会马上关闭网络链接,如果这样的话,对于某些成语,将会遗留大量无用的网络链接,这些网络链接会占用大量的系统资源。
在Socket对象被关闭后,我们可以通过isClosed方法来判断某个Socket对象是否出于关闭状态,代码如下:
3如何设置Socket链接的超时时间
链接超时就是Socket链接服务器,服务器在还没有响应客户端之前,客户端等待的时间,如果超过这个时间,客户端会抛出超时异常。
1:创建Socket对象需要至少指定哪些信息?
创建Socket对象至少要指定IP(域名)和端口号,代码如下:
Socket socket = new Socket("www.microsoft.com", 80);
2:请写出使用Socket链接服务器(IP:192.168.17.100,端口号:8080)以及与服务端交互的Java代码。
这个问题就是要考察应聘者是否了解Socket的使用方法。与服务器交互实际上就是从服务器读取数据以及向服务器写数据。在解答本题时选择一种类型的数据作为例子。例如字符串,但要注意本题的考点,向服务端写数据时要使用flush方法刷新缓冲区的数据。在使用完流和Socket连接后要记得关闭掉它。
代码如下:
Socket socket = new Socket("192.168.17.100", 80); OutputStream os = socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os); BufferedWriter bw = new BufferedWriter(osw); //向服务器写数据 bw.write("hello world"); bw.flush(); InputStream in = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(in); BufferedReader br = new BufferedReader(isr); String str = ""; //从服务器读数据 while((str = br.readLine()) != null){ os.close(); in.close(); socket.close(); }
扩展知识:
哪些情况会关闭socket
有四种:
1直接调用socket.close();
2只要InputStream和OutPutStream有一个关闭,则网络链接自动关闭,(必须通过ImputStream.close方法和OutputStream.close方法关闭流,才能使网络自动关闭)。
3在程序退出时网络自动关闭。
4将Socket对象设为null或者在Socket对象未被释放的情况下被新的Socket对象覆盖后,由Dalivk虚拟机垃圾回收器回收为Socket对象分配的内存控件时自动关闭。
虽然这四种方法都可以达到同样的目的,但一个健壮的网络程序最好的是使用1、2中方法关闭网络链接,因为3、4中方法一般不会马上关闭网络链接,如果这样的话,对于某些成语,将会遗留大量无用的网络链接,这些网络链接会占用大量的系统资源。
在Socket对象被关闭后,我们可以通过isClosed方法来判断某个Socket对象是否出于关闭状态,代码如下:
Socket socket = new Socket(); Lod.d("isClosed",socket.isClosed());除了isClosed方法,Socket类还有一个isConnected方法来判断Socket对象是否链接成功。其实isConnected方法所判断的并不是Socket对象的当前链接状态,而是Socket对象是否曾经成功链接过,如果成功链接过,即使现在isClosed返回true,isConnected方法仍然返回true。因此,要判断当前的Socket对象是否出于链接状态,必须同事使用isClosed和isConnected两个方法,既只有当isClosed返回false,isConnected方法返回true时候,Socket对象才出于链接状态。。
3如何设置Socket链接的超时时间
链接超时就是Socket链接服务器,服务器在还没有响应客户端之前,客户端等待的时间,如果超过这个时间,客户端会抛出超时异常。
<span style="font-size:18px;">Socket socket = new Socket(); //设置超时时间为2s socket.connect(new InetSocketAddress("192.168.17.100",80),2000);</span>
相关文章推荐
- lib和dll文件的区别和联系
- 安卓事件分发机制
- java日志系列(三)log4j 2
- php 使用GD库上传图片以及创建缩略图
- 互联网金融机构最高补贴2000万元
- js动态添加节点到兄弟节点
- Redis_conf配置文件说明
- AIX 11gR2 grid root.sh Error: with status:FAIL.Error code is 256
- Android EventBus源码解析 带你深入理解EventBus
- 指针数组与数组指针
- NYOJ 298-点的变换(经典矩阵解决点平移、缩放、翻转和旋转)
- Debian系统升级:从Wheezy到Jessie
- LintCode Majority Number 主元素
- 一种Unity2D多分辨率屏幕适配方案
- linux根目录文件夹介绍
- Autolayout使用小结
- 暑假期望和学习
- OracleXENuiv,数据库创建用户,表空间,
- arm交叉编译libidn
- 单页Html及Android App供小孩学习常用汉字