Java网络编程:Socket和WebSocket

一、Socket总结

1、Socket简介

在计算机通信领域,Socket 被翻译为“套接字”,它是计算机之间进行通信一种约定。通过 Socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。

Socket所处层次

图中可以看到Socket是应用层与TCP/IP协议族通信的中间软件抽象层,就是提供了tcp/ip协议的抽象,对外提供了一套接口,同过这个接口就可以统一方便的使用tcp/ip协议的功能。

2、Socket常用方法图解

图片来源于网络,侵删

3、Socket网络通信流程

Socket基于Tcp连接的通信流程图

4、Java中Socket使用举例

在Java中,我们使用Socket有两种,一个是基于TCP的Socket,一个是基于UDP的DatagramSocket,本篇只分析基于TCP的Socket。现在我们来看Socket的使用:

客户端:指明主机端口创建Socket,获取输出流,写入数据。

        Socket socket = null;
        OutputStream os = null;

        try {
            socket = new Socket("192.168.1.106",9200);
            os = socket.getOutputStream();
            os.write("hello server !".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(os != null){
                    os.close();
                }
                if(socket != null){
                    socket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

服务端:指明绑定的端口,创建ServerSocket,开启端口监听。

      ServerSocket serverSocket;
        try {
            serverSocket = new ServerSocket(9200);
        } catch (IOException e) {   
            return;
        }

        while (isRunning){
            try {
                Socket client = serverSocket.accept();
                handleClient(client);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        try {
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

这里只是一个简单的示例,当然实际开发中可能需要更多的东西,比如在handleClient(client)处理数据的时候加入线程池去处理,以及client的关闭等,这里只是简单的使用。

扫描二维码关注公众号,回复: 12914286 查看本文章

二、WebSocket总结

1、WebSocket简介

WebSocket 是 HTML5 一种新的应用层协议,它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯。

在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

在此WebSocket 协议中,为我们实现通讯服务带来了两大好处:

a. Header

互相沟通的Header是很小的-大概只有 2 Bytes

b. Server Push

服务器可以主动传送数据给客户端

2、WebSocket作用

WebSocket可以实现网站即时通讯技术,替代轮询

     网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力实现即时通讯通常是采用轮询、Comet技术解决。

     HTTP协议是非持久化的,单工的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。当需要即时通讯时,通过轮询在特定的时间间隔(如1秒),由浏览器向服务器发送Request请求,然后将最新的数据返回给浏览器。这样的方法最明显的缺点就是需要不断的发送请求,而且通常HTTP request的Header是非常长的,为了传输一个很小的数据 需要付出巨大的代价,是很不合算的,占用了很多的宽带。而最比较新的技术去做轮询的效果是Comet – 用了AJAX。但这种技术虽然可达到全双工通信,但依然需要发出请求。

    然而WebSocket全双工通信协议的出现可以弥补这一缺点。在WebSocket中,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

3、WebSocket与Socket的区别

Socket其实并不是一个协议,就是提供了tcp/ip协议的抽象,对外提供了一套接口,同过这个接口就可以统一方便的使用tcp/ip协议的功能。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

WebSocket则是Html5开始提供的一个典型的应用层协议,可以用来实现网站的即时通讯。

补充:现在大多数的手机即时通讯app基本都是通过XMPP协议来实现的,服务器端比如 Netty + openfire等等。

猜你喜欢

转载自blog.csdn.net/CSDN2497242041/article/details/106995399