仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 593|回复: 12
打印 上一主题 下一主题

[学习教程] 发布一篇Java收集编程从进门到精晓(27):封闭服务端毗连

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:21:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
恰恰证明了java的简单,要不怎么没有通过c/c++来搞个这种框架?
在客户端和服务真个数据交互完成后,一样平常必要封闭收集毗连。关于服务端来讲,必要封闭Socket和ServerSocket。
在封闭Socket后,客户端其实不会即刻感知自已的Socket已封闭,也就是说,在服务真个Socket封闭后,客户真个Socket的isClosed和isConnected办法仍旧会分离失掉false和true。但对已封闭的Socket的输出输入流举行操纵会抛出一个SocketException非常。
在封闭服务真个ServerSocket后,ServerSocket对象所绑定的端口被开释。这时候客户端将没法毗连服务端程序。上面的代码演示了在服务端封闭Socket后,客户端是所何反响的。
package server;
import java.net.*;
class Client
{
    public static void main(String[] args) throws Exception
    {
        Socket socket = new Socket("127.0.0.1", 1234);
        Thread.sleep(1000);
        // socket.getOutputStream().write(1);
        System.out.println("read() = " + socket.getInputStream().read());
        System.out.println("isConnected() = " + socket.isConnected());
        System.out.println("isClosed() = " + socket.isClosed());
    }
}
public class CloseSocket
{
    public static void main(String[] args) throws Exception
    {
        ServerSocket serverSocket = new ServerSocket(1234);
        while (true)
        {
            Socket socket = serverSocket.accept();
            socket.close();
        }
    }
}
测试
实行上面的命令
java server.CloseSocket
java server.Client
运转了局
read() = -1
isConnected() = true
isClosed() = false
从下面的运转了局能够看出例程Client并未抛出SocketException非常。而在012行的read办法前往了-1。假如将socket.close往失落,客户真个read办法将处于堵塞形态。这是由于Java在发明没法从服务真个Socket失掉数据后,就经由过程read办法前往了-1。假如将011行的正文往失落,Client就会抛出一个SocketException非常。人人能够尝尝,并socket.close行改成serverSocket.close后,客户端就会抛出毗连非常:
Exception in thread "main" java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:168)
    at java.net.SocketInputStream.read(SocketInputStream.java:182)
    at chapter5.Client.main(CloseSocket.java:12)
显式地挪用close办法封闭ServerSocket并非必需的,在程序加入时将主动封闭ServerSocket。但经由过程close办法封闭ServerSocket,可使其他的ServerSocket对象绑定该端口。可使用ServerSocket类的isClosed和isBound办法判别ServerSocket是不是处于举动形态,以下面的代码所示:
ServerSocket serverSocket = new ServerSocket(1234);
if (serverSocket.isBound() == true && serverSocket.isClosed() == false)
    System.out.println("serverSocket处于举动形态!");
else
    System.out.println("serverSocket处于非举动形态!");
下面代码所示的“非举动形态”多是serverSocket对象已封闭,也多是serverSocket对象是利用ServerSocket类的默许机关办法创立的,并且未挪用bind办法绑定端口。在这里要注重的是isBound办法前往true其实不意味着serverSocket对象处于举动形态,挪用close办法其实不会将绑定形态置为false。这一点和Socket类的isConnected办法相似。

主要缺点就是:速度比较慢,没有C和C++快
兰色精灵 该用户已被删除
沙发
发表于 2015-1-20 20:57:51 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
柔情似水 该用户已被删除
板凳
发表于 2015-1-21 09:28:08 | 只看该作者
是一种使用者不需花费很多时间学习的语言
蒙在股里 该用户已被删除
地板
发表于 2015-1-30 13:29:01 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
老尸 该用户已被删除
5#
发表于 2015-2-6 12:44:42 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
若相依 该用户已被删除
6#
发表于 2015-2-6 18:31:32 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
精灵巫婆 该用户已被删除
7#
发表于 2015-2-7 02:40:28 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
因胸联盟 该用户已被删除
8#
发表于 2015-2-9 12:05:18 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
爱飞 该用户已被删除
9#
发表于 2015-2-27 06:08:47 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
第二个灵魂 该用户已被删除
10#
发表于 2015-3-4 13:29:12 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
逍遥一派 该用户已被删除
11#
 楼主| 发表于 2015-3-5 23:45:15 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
小妖女 该用户已被删除
12#
发表于 2015-3-6 22:11:28 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
小女巫 该用户已被删除
13#
发表于 2015-3-20 19:52:49 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 01:36

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表