学习socket的起因
原因就是工作中有个项目要用到socket,第一次听到socket这个词的时候一脸懵逼,java中还有这玩意?不都是SSM一套用HTTP请求吗?怎么还有socket这个玩意?
socket是什么?
摘自百度百科:
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
才疏学浅,个人没办法明确描述socket是什么。不过定义不重要,重要的是如何使用它。
如何使用socket?
创建socket服务端
服务端多线程处理客户端请求
1 | /** |
开启服务端
1 | public class Server1 { |
编写socket客户端
1 | public class Client1 { |
使用socket的个人体会
- 写出一个简单的服务端/客户端Demo很容易,实际使用并不简单
- socket和HTTP不同,HTTP有请求就有响应,而socket可以没有响应。又或者说socket根本就没有响应这个概念。因为socket是全双工的,所以它的请求和响应都一样。这就需要在使用过程中分辨请求和响应。
- socket必须要鉴权,在第一次使用socket的时候我就在想,这不是只要我开放了端口谁都可以连接上我的socket服务端吗?所以用socket一定要鉴权,对非法连接拒之门外(虽然我不知道的怎么做,但是一定要做)。
- socket读取数据十分麻烦,TCP/IP是传输层协议,而HTTP是应用层协议,两者分工不同。自然造就就读取数据的差异。使用socket必须事事亲力亲为,否则什么都办不成。