逍遥一派 发表于 2015-1-18 11:21:23

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

恰恰证明了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++语言。

老尸 发表于 2015-2-6 12:44:42

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

若相依 发表于 2015-2-6 18:31:32

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

精灵巫婆 发表于 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而写的。

因胸联盟 发表于 2015-2-9 12:05:18

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

爱飞 发表于 2015-2-27 06:08:47

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

第二个灵魂 发表于 2015-3-4 13:29:12

是一种使网页(Web Page)产生生动活泼画面的语言

逍遥一派 发表于 2015-3-5 23:45:15

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

小妖女 发表于 2015-3-6 22:11:28

是一种语言,用以产生「小应用程序(Applet(s))

小女巫 发表于 2015-3-20 19:52:49

是一种使网页(Web Page)产生生动活泼画面的语言
页: [1]
查看完整版本: 发布一篇Java收集编程从进门到精晓(27):封闭服务端毗连