当前位置: 首页 > 面试题库 >

套接字与套接字通道

翁钧
2023-03-14
问题内容

我试图理解SocketChannels和NIO。我知道如何使用常规套接字,以及如何制作一个简单的每客户端线程服务器(使用常规阻塞套接字)。

所以我的问题是:

  • 什么是SocketChannel?
  • 当使用SocketChannel而不是Socket时,我还能得到什么呢?
  • 通道和缓冲区之间是什么关系?
  • 什么是选择器?
  • 文档中的第一句话是A selectable channel for stream-oriented connecting sockets.。那是什么意思?

我也阅读了本文档,但是不知何故……


问题答案:

A
Socket是阻止输入/输出设备。Thread如果基础缓冲区已满,它将使正在使用它的阻止读取,甚至可能阻止写入。因此,如果服务器具有一堆open,则必须创建一堆不同的线程Socket

A
SocketChannel是从套接字读取数据的一种非阻塞方式,因此您可以让一个线程立即与一堆打开的连接进行通信。通过在上添加一堆SocketChannels
Selector,然后循环使用选择器的select()方法,该方法可以通知您套接字是否已被接受,已接收数据或已关闭。这使您可以在一个线程中与多个客户端进行通信,而不必承担多个线程和同步的开销。

Buffers是NIO的另一个功能,它使您可以通过读取和写入访问基础数据,从而避免了将数据复制到新阵列中的开销。



 类似资料:
  • 问题内容: 什么是实现TCP套接字通信的首选平台? 我对......感兴趣: 脚本语言(例如,Swocket for Python) 和运行时(例如.NET / Java)。 问题答案: 在Java中,我们使用Apache Mina, http://mina.apache.org/ 其性能可与C实现媲美。

  • 你好,我想问一下使用这个有什么不同: 谢谢你的回答

  • 我有一个UDP服务器,它必须同时为IPV4和IPV6地址上的客户端提供服务。我创建了一个IPV6套接字来同时为IPV4和IPV6客户端服务。 服务器在第一次通信时存储客户端的IPAddress。如果是IPV4客户端,则存储为IPV4地址;如果是IPV6客户端,则服务器存储为IPV6地址。对于以后的所有通信,它检查存储是否已知(存储)该客户端,然后相应地执行操作。为了将客户端地址与存储的地址进行比较

  • socket_read和socket_recv之间有什么区别?我正在尝试使用PHP套接字,但使用socket_read时收到了以下警告: 请帮帮我!

  • 试着找出我做错了什么。我一直收到这样的错误:“失败:WebSocket握手期间出错:Sec WebSocket接受不匹配”。 下面是我从服务器得到的: 我采用了“EN04JZBFLCFCHK5QNUXJG==”并添加了“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”以获得以下内容: 所以我的回应是: 我不确定我做错了什么,但从我在其他示例中看到的情况来看,我的webso

  • 在Java NIO体系中,SocketChannel是用于TCP网络连接的套接字接口,相当于Java网络编程中的Socket套接字接口。创建SocketChannel主要有两种方式,如下: 打开一个SocketChannel并连接网络上的一台服务器。 当ServerSocketChannel接收到一个连接请求时,会创建一个SocketChannel。 建立一个SocketChannel连接 打开一