本文最后更新于182 天前,其中的信息可能已经过时,如有错误请发送邮件到2289035571@QQ.COM
感谢 TurboAI对本博客的的大力赞助。 创作不易,如果您觉得有帮助,请 支持LIncol29! 为了让我能够继续创作更好的内容,你也可以选择订阅博客的 VIP ,包年VIP仅需10元/年,所有VIP内容免费观看
Socket简介
- 什么是Socket?
在计算机通信领域,socket被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。
- Socket的本质
Socket本质是编程接口(API),这也是为什么一般叫Socket编程的原因。对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。
- Socket的作用
Socket的英文原义是“孔”或“插座”,通常也称作“套接字”,可以用来实现不同虚拟机或不同计算机之间的通信。
Socket编程方式:
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open->读写write/read->关闭close”模式来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写lO、打开、关闭),因此Socket也提供了类似于连接(Connect)、关闭连接(Close)、发送接受等方法调用。
数据传输方式常用的有两种:STREAM和DGRAM
- STREAM 表示面向连接的数据传输方式。数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送,但效率相对较慢。
- DGRAM 表示无连接的数据传输方式。计算机只管传输数据,不作数据校验,DGRAM 所做的校验工作少,所以效率比 SOCK_STREAM 高。QQ 视频聊天和语音聊天就使用 DGRAM 传输数据,因为首先要保证通信的效率,尽量减小延迟,而数据的正确性是次要的,即使丢失很小的一部分数据,视频和音频也可以正常解析,最多出现噪点或杂音,不会对通信质量有实质的影响
Socket示意图
Socket位于应用层和传输层之间
socket太好用了,使我大脑旋转(doge)
还记得自己看着mc服务器第三方零碎文档对接服务器获取服务器状态的日子,真是太酸爽了
厉害!我还是工作以后才接触到,然后去学习这些知识。
哈哈,我是寒假没事开个mc服,看见有人用C++实现了获取服务器状态这个功能,于是没事做也想着能不能用C#也实现一次,然后才开始折腾的,也算是自身需求作为动力吧
当时被TCP分片折腾惨了,查了一堆资料,最后自己测试才发现每次mc服务器返回的数据头前几个byte是每次数据包的长度才弄好(没文档的tcp对接最为致命)
这个深有体会。我在调用AForge类库的时候,没看官方文档。程序出现bug不知道是什么原因,网上查不到资料。最后去翻阅文档,才发现问题。