客户端Socket

原创 2015年07月10日 17:25:50

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




Java Socket编程 文件传输(客户端从服务器下载一个文件)

用于客户端从服务器端下载文件 服务器(Server) package com.socket.sample; import java.io.BufferedInputStream; imp...

Socket客户端

  • 2017年10月09日 14:22
  • 216KB
  • 下载

Socket编程客户端

  • 2015年06月12日 17:55
  • 77KB
  • 下载

java基于TCP协议的Socket客户端文件上传与下载

import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStrea...

Socket服务器和客户端

  • 2013年05月23日 16:54
  • 46KB
  • 下载

Android客户端通过socket与服务器通信

下面是一个demo,Android客户端通过socket与服务器通信。 由于Android里面可以完全使用java.io.*包和java.net.*包,那么,实际上,逻辑部分与J2SE没有区别。只是U...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:客户端Socket
举报原因:
原因补充:

(最多只允许输入30个字)