Socket快速简要了解

Socket快速简要了解

本文致力于快速了解Socket是什么以及简洁地说明几个比较重要的点。但是获得系统完备的知识体系是很重要的,需要深入了解原理和具体细节(其实很有意思),以后有时间我会慢慢补充(更新的形式补坑,所以一些坑和扩展可以跳过)。
本文都只是我现阶段的了解!以及,参考的一些内容会尽量给出链接。
Socket一般译作套接字,从不同角度来看Socket的定义有多个。
定义1:Socket是传输层连接的端点,传输层实现的是端到端通信,端点就是套接字。


插播:我一直觉得Socket应该分为两类(有这种说法)。因为从java.net这个包中可以看到ServerSocket这个类的说明是:ServerSocket
即:服务器套接字等待网络请求传入,基于请求执行一些操作(可能会返回结果给请求者)。可以称之为监听Socket。
用法:

//创建监听Socket,等待接收连接Socket。
ServerSocket server=new ServerSocket(port);
//accept()接收到连接Socket,用于读写
Socket socket=server.accept();

//获取输入流,之后可以读到缓冲区等。
InputStream inputStream=socket.getInputStream();

Socket类的说明是:
Socket
即:两台机器之间通信的端点。可以称之为连接Socket。
用法是:

//创建连接Socket,获得输出流,之后可以向输出流写入数据。
Socket socket=new Socket(host,port);
OutputStream ops=socket.getOutputStream();

这里再扩展一下:一条连接可以由一个通信五元组标识(一条TCP连接则是四元组确定)
五元组
服务器端的端口一般需要我们自己指定(根据应用层协议不同,FTP用20控制21传数据,SSH:22, Telnet: 23 HTTP常用80,HTTPs常用443)。客户端的端口默认是用native方法由操作系统随机bind一个(也可以指定)。
服务器端Socket可能只监听一个端口,但是和不同的客户端组合就形成了很多的Socket连接。

这里可以扩展到IO多路复用(IO multiplexing)select/epoll,单个进程/线程处理多个网络连接IO,socket设置为非阻塞状态non_blocking(Socket IO没有被block,但是进程是被select这个函数block的)。epoll方式1G内存大约能监听10万个Socket连接。
注意如果连接数不是很高的话,用select/epoll的web server未必比multi-threading+blocking IO 的web server性能更好。

对于UDP的Socket,要使用DatagramSocket这个类。

本段部分参考自https://blog.csdn.net/a78270528/article/details/80318571 有更详细全面的代码。


定义二:Socket是传输层上抽象出来的编程接口,使用这个抽象编程接口可以进行一些TCP/IP协议栈的操作。监听,读写等。
从下图来看,Socket连接是抽象连接,使用TCP协议的话,就相当于一条抽象TCP连接,可以编程操作。
抽象接口
这两个定义并不冲突,只是一个从传输层通信端点角度来看,一个从编程接口角度来看。


连接Socket(不是监听Socket)的输入输出流可以读写内核中的一个对应文件,这个文件有唯一的文件描述符fd(File Descriptor)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: hpsocket.net是一个开源的高性能网络库,能够大大简化开发者开发网络编程的复杂度。它可以帮助开发者轻松实现服务器和客户端之间的通信。 首先,hpsocket.net的特点之一是高性能。它使用了IOCP(输入/输出完成端口)技术,可以在Windows系统上实现高效的异步网络编程。这样一来,在处理并发连接时,不会出现阻塞,大大提高了服务器的性能和吞吐量。 其次,hpsocket.net提供了丰富的接口和事件回调函数。通过这些接口和回调函数,开发者可以自定义处理数据、连接和异常等事件。这样,开发者可以根据自己的具体需求很轻松地实现自定义的网络逻辑。 此外,hpsocket.net还支持多线程和会话管理。开发者可以通过设置适当的线程数量来实现并发处理请求。同时,它还提供了会话管理功能,可以方便地跟踪和管理与客户端的连接。 最后需要注意的是,hpsocket.net有详细的官方教程和文档。无论是初学者还是有经验的开发者,都可以通过查阅官方文档和教程快速掌握和使用该网络库。官方文档提供了丰富的示例代码和详细的说明,可以让开发者更好地理解和使用hpsocket.net。 综上所述,hpsocket.net是一个强大且易用的网络编程库,它提供了高性能、丰富的接口和事件回调函数、多线程和会话管理等功能,非常适合开发者在Windows环境下实现高效的服务器和客户端通信。 ### 回答2: hpsocket.net是一个开源的网络编程库,它提供了一些方便、高效的网络编程接口和工具,可以快速开发基于TCP/IP协议的服务器和客户端应用程序。 首先,hpsocket.net提供了基于事件驱动模型的网络编程接口。它使用了异步I/O的方式,依托于Windows IOCP和Linux EPOLL等底层技术,能够处理大量的并发连接,实现高性能的网络通信。 其次,hpsocket.net还提供了一些常用功能的封装,例如数据收发、数据加解密、数据缓冲管理等。这些功能的封装,大大简化了网络编程过程中的操作,提高了开发效率。 此外,hpsocket.net还提供了丰富的示例代码和文档,由于对文档的要求较高,这里只是简要地介绍了hpsocket.net的一些功能和特点。想要深入了解和使用hpsocket.net,可以参考官方网站上的教程和文档,通过实际操作和实践,掌握更多网络编程的技巧和知识。 总之,hpsocket.net是一个功能强大、易用性高的网络编程库,可以帮助开发者快速构建高性能的服务器和客户端应用程序。无论是初学者还是有经验的开发者,都可以通过学习和使用hpsocket.net库,轻松实现各种网络编程需求。 ### 回答3: hpsocket.net是一个开源的高性能网络库。它提供了一套简单易用的接口,用于网络通信的开发。该教程是针对hpsocket.net的使用进行详细讲解。 该教程首先介绍了hpsocket.net的特点和优势,例如高性能、低延迟、多线程处理等。然后详细讲解了库的安装和配置,包括下载源码、编译生成库文件等步骤。 接下来,教程重点介绍了hpsocket.net的核心功能,包括TCP/UDP通信、SSL安全加密、HTTP/HTTPS协议等。针对每个功能,教程提供了详细的代码示例和解释,帮助开发者快速上手。 此外,教程还介绍了一些高级功能,例如心跳包、数据发送和接收的处理、上传和下载文件等。这些功能的讲解更加深入,包括使用方法、参数说明和注意事项等。 最后,教程提供了一些常见问题的解答和一些实际项目的案例分析,帮助开发者更好地理解和应用hpsocket.net。 总之,hpsocket.net教程是一本详尽且易懂的指南,适合想要学习和使用hpsocket.net的开发者。通过该教程,开发者可以快速掌握hpsocket.net的使用方法,并利用其强大的功能进行网络通信开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值