socket-遇到一枚假程序员
1. 一脸懵比
今天又偶然看到socket,对socket有点简单的概念,知道是网络编程、客户端与服务端通信等,但是不是太了解,就随便搜了下,几千万条记录,随便点开看了几页,socket跟网络编程也是绑定在一起的,又搜了下,介绍也是好多。

随便点开了一篇,开头介绍到 “套接字socket是大多数程序员都非常熟悉的概念,它是计算机网络编程的基础,TCP/UDP收发消息都靠它。大多数程序员都非常熟悉的? 有点懵比了,开发做了10几年了,一直没怎么用过soket编程啊,看了一下,代码或者demo很快就能跑起来,可为毛以前一直没用到呢?用到什么地方了?难道我是一个假程序员?一直在做企业项目的开发,好像都没用到啊,难道做的假的项目?有点怀疑人生了。
2. 抓狂模式
作为java开发老鸟(i'm 软件老王),开始搜索java socket编程,运行了几个demo,也没啥啊,可还是那个疑惑,人家都说了大部分开发者都非常熟悉的,为啥我们以前的项目都没用啊?soket编程用到哪里去了?是不是在java的spring框架或者web容器tomcat、weblogic等封装好了,用了不知道而已?
3. 有点眉目
一边查看资料一边实现,从开始的搜索:“为什么要用socket”、“网络编程”、“java 网络编程”、“java socket编程”、“企业应用socket”看的一脸懵比,一直到“springboot socket”、“websocket”、“http与websoket”才大概明白怎么回事了。。
4. 初步介绍
java人员没用过socket编程很正常,假如有跟我一样的假程序员,以前没怎么用过socket编程,不用慌的一逼,不用怀疑人生,非常正常(泥煤的),计划先初步介绍下概念,后续有空了,加上代码demo再好好介绍下。
4.1 socket编程
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。i'm 软件老王
socket是个大的概念一两句话介绍不清楚,先到有个概念吧,用到的地方有很多,语言也有很多,客户端/服务端的c/s模式用的尤其多,socket在windows下叫Windows Sockets,你桌面上的牵涉到通讯的,例如qq、酷狗、浏览器、桌面游戏啊等等吧,socket通信是计算机网络编程的基础,互联网上的通信离不开它。实现的语言也有很多C,C++,.net、python、java等等吧,都有对应的实现包。i'm 软件老王
4.2 java socket
java的socket相关包再java.net.*下面,但是java中用到socket的地方,其实不多。
JAVA2平台包括:J2SE(Java2 Standard Edtion)标准版、J2EE(Java2 Enterprise Edition)企业版、J2ME(Java2 Micro Edition)微缩版。
J2SE:包括构成Java语言核心的类。比如数据库连接、接口定义、网络编程类。
J2EE:包括了J2SE中的类,并且还包括了开发企业级应用的类。比如EJB、JSP等。i'm 软件老王
J2ME:包含了J2SE中的一部分类,主要用于手机软件开发。i'm 软件老王
J2SE和J2ME用的人少(本来想写基本没人用了,话不敢说那么满了),目前的java应用大部分是基于B/S模式,就是浏览器与服务器的,用的浏览器的http协议进行通信。
java 提供了socket操作包,但是使用的场景很少的。
4.3 HTTP连接
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
(1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
(2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
由 于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的 做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客 户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。
4.4 WebSocket
HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据,HTTP协议做不到服务器主动向客户端推送信息,这种方式没什么不好,从网络安全来讲,避免的了服务器端的不必要骚扰,
但是这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息,轮询的效率低,非常浪费资源(因为必须不停连接,或者HTTP连接始终打开,i'm 软件老王)。
WebSocket就是在这种背景下产生的,WebSocket协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种,它是http的一个补充。
4.5 初步结论
Java中的Websocket类似于HTTP协议,是一个协议而已,假如有跟我一样的假程序员(i'm 软件老王),以前没怎么用过,也不用慌的一逼,其实也没啥,好多或者说大部分企业的Java应用是用不到socket协议的,05/06年以后企业把以前的CS模式升级到B/S模式,都是基于HTTP协议的。
I’m 「软件老王」,如果觉得还可以的话,关注下呗,后续更新秒知!欢迎讨论区、同名公众号留言交流!
socket-遇到一枚假程序员的更多相关文章
- Java 程序员必备的 15 个框架,前 3 个地位无可动摇!
Java 程序员方向太多,且不说移动开发.大数据.区块链.人工智能这些,大部分 Java 程序员都是 Java Web/后端开发.那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢? 今天 ...
- 漫谈程序员系列:3D打印能打印出程序员吗
首先声明,本文是一本正经的胡扯,绝不是随随便便的胡扯,请您不要随便攻击我胡说八道.我要反复星爷在<喜剧之王>里的台词:事实上.我是一本正经的喷子. 3D打印的定义 关于3D打印,以下是来自 ...
- 程序员必备字体Source Code Pro
最近捕获一枚,程序员专用字体,很不错. 介绍如下: Source Code Pro 是由大名鼎鼎的 Adobe 公司发布的一款开源免费的等宽编程字体,它非常适合用于显示代码,支持 Linux.Mac ...
- 优秀Java程序员的四大忌,你避免了吗?
做为一名优秀的程序员需要具备永不放弃的精神,如果一个程序员不具备这种永不放弃的精神,那么这个程序员只能算是一名假程序员.而通往成功的道路上往往是不平坦的,想要成为一个合格的高级Java程序员,需要规避 ...
- Java程序员拥有这些工具,还怕干不出好活
老话说,工欲善其事,必先利其器. 那么,作为编程人员,你都用过哪些“兵器”呢?你的”兵器“够”锋利”吗? 近期,有很多新朋友问,都有什么画流程图的工具,给推荐推荐? 索性,就静下来,好好梳理一下,从事 ...
- 作为一枚第二天上班的小小.net程序员(技术宅的那种)很迷茫哦,第一个随笔
作为一枚第二天上班的小小.net程序员(技术宅的那种)很迷茫哦,第一个随笔
- Github上安卓榜排名第2的程序员教你如何学习【转载,侵删】
来自:峰瑞资本(微信号:freesvc)文章作者:代码家(微信 ID:daimajia_share) 软件早已吞噬整个世界,程序员是关键角色.过去 40 年中,许多伟大的公司都由程序员缔造,比如比尔· ...
- Socket编程指南及示例程序
例子代码就在我的博客中,包括六个UDP和TCP发送接受的cpp文件,一个基于MFC的局域网聊天小工具工程,和此小工具的所有运行时库.资源和执行程序.代码的压缩包位置是http://www.blogja ...
- Android程序员必知必会的网络通信传输层协议——UDP和TCP
1.点评 互联网发展至今已经高度发达,而对于互联网应用(尤其即时通讯技术这一块)的开发者来说,网络编程是基础中的基础,只有更好地理解相关基础知识,对于应用层的开发才能做到游刃有余. 对于Android ...
随机推荐
- DataNode的工作机制
DataNode的工作机制 一个数据块在DataNode以文件的形式在磁盘上保存,分为两个文件,一个是数据本身, 一个是元数据信息(包括数据的长度,校验和,时间戳) 1.DataNode启动后,向Na ...
- vue使用问题总结(长期更新)
循环中绑定标签的属性 <div class="imgdiv" v-for="template of templateArr"> <img :s ...
- PHP-1.数据库连接与登陆
<?php //数据库信息 $servername = "localhost"; $username = "root"; $password = &quo ...
- 基于 HTML5 Canvas 的可交互旋钮组件
前言 此次的 Demo 效果如下: Demo 链接:https://hightopo.com/demo/comp-knob/ 整体思路 组件参数 绘制旋钮 绘制刻度 绘制指针 绘制标尺 绘制文本 1. ...
- Jboss反序列化漏洞复现(CVE-2017-12149)
Jboss反序列化漏洞复现(CVE-2017-12149) 一.漏洞描述 该漏洞为Java反序列化错误类型,存在于jboss的HttpInvoker组件中的ReadOnlyAccessFilter过滤 ...
- 04-kubernetes网络通信
目录 kubernetes网络通信 需要解决的问题 flannel Calico/Cannel kubernetes网络通信 需要解决的问题 同一个pod内部的不同容器间通信, local Pod间的 ...
- 基于 Autojs 的 APP、小程序自动化测试 SDK - 2019年8月3日
原文:https://blog.csdn.net/laobingm/article/details/98317394 autojs sdk基于 Autojs 的 APP.小程序自动化测试 SDK,支持 ...
- Python实现网络多人聊天室
网络多人聊天室 文件结构: chatroom ├── client.py # 客户端代码 ├── language.py # 语言文件 ├── server.py # 服务端代码 └── set ...
- NLP(十三)中文分词工具的使用尝试
本文将对三种中文分词工具进行使用尝试,这三种工具分别为哈工大的LTP,结巴分词以及北大的pkuseg. 首先我们先准备好环境,即需要安装三个模块:pyltp, jieba, pkuseg以及L ...
- powermockito单元测试之深入实践
概述 由于最近工作需要, 在项目中要做单元测试, 以达到指定的测试用例覆盖率指标.项目中我们引入的powermockito来编写测试用例, JaCoCo来监控单元测试覆盖率.关于框架的选择, 网上讨论 ...