客户端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>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值