关闭

客户端Socket

205人阅读 评论(0) 收藏 举报
分类:

下面有关于一下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>




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9627次
    • 积分:299
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:2篇
    • 译文:0篇
    • 评论:3条
    最新评论