问题标签 [socketchannel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - SSL 和 SocketChannel
理想情况下,我只需要一个简单的SSLSocketChannel
.
我已经有一个组件可以通过普通方式读取和写入消息SocketChannel
,但是对于其中一些连接,我必须通过网络使用 SSL;但是,对这些连接的操作是相同的。
有谁知道免费的SSLSocketChannel
实现(使用适当的选择器)或类似的东西?我找到了这个,但是选择器不接受它,因为它的供应商不是 SUN。
我正在通过一个简单的对象将 read_from/writing_to 网络逻辑与网络数据的插入和检索解耦,以便在SSLEngine
不生气的情况下使用 a ,但考虑到我不知道的事实,正确实现它真的很棘手SSL协议的内部...
java - Java SocketChannel 吃掉我的字节
我为远程服务器创建了一个 SocketChannel,以在 Tomcat 上发送和接收消息。为了从远程计算机接收消息,我使用了一个专用于任务的线程(只有这个线程将从套接字读取,没有别的)。
当 SocketChannel 接收到一些字节时(我一直在非阻塞模式下轮询 SocketChannel 以获取新数据),我首先读取 4 个字节以获取下一条消息的长度,然后从 SocketChannel 分配并读取 x 个字节,即然后解码并重建成一条消息。
下面是我的接收线程代码:
我从 SocketChannel 收到的第一个字节很好,我成功解码了消息。但是,下次我从 SocketChannel 读取时,套接字向前跳过了大约 100 个字节,这导致读取错误的字节并将其解释为长度,从而导致所有内容都损坏。
代码有什么问题?没有其他线程正在从 SocketChannel 读取。
java - Java 选择器/SocketChannel 的问题
我在玩多人游戏时遇到问题。现在,我只是想让服务器将当前级别发送到客户端。服务器肯定会发送数据,但它永远不会到达客户端应用程序。
客户端代码:
服务器代码:
唯一到达客户端的是字节 0x01(表示电平变化)。
提前致谢。
java - Java ServerSocketChannel SocketChannel(回调)
我正在努力学习 Java。我想实现一个简单的网络连接 4 游戏以及聊天功能。
我希望我的网络逻辑是非阻塞的,所以经过大量研究后,我发现 SocketChannel 是我重新调整需求后的样子。
仍然没有意义的是 SocketChannels 中缺少 CallBack 函数。就像在 C# 中发现的那样。
我这次的查询是:如何将收到的数据传送到聊天或游戏表单(JFrame)?
一些指导是最受欢迎的。
java - SocketChannel 超时不起作用
我想使用 aSocketChannel
并为其读/写方法设置超时。我试图为拥有我SocketChannel
这样的套接字设置超时:
但这不起作用。还有其他解决方案吗?
java - 验证在非阻塞服务器中接收到的数据
我正在使用 javas NIO 包构建一个非阻塞服务器,并且有几个关于验证接收到的数据的问题。
我注意到,当我在套接字通道上调用 read 时,它会尝试填充它正在读取的字节缓冲区(根据文档)。当我从客户端向服务器发送 10 个字节时,服务器会将这十个字节读入字节缓冲区,字节缓冲区中的其余字节将保持为零,从读取操作返回的数字将是即使客户端只写了 10 个字节,我的字节缓冲区的大小。
我想弄清楚的是,当服务器从套接字通道读取时(在上述情况下,是 10 而不是 1024),是否有办法获取客户端发送到服务器的字节数。
如果这不起作用,我知道我可以通过将分隔符与我的“指令集标头”结合使用,将来自客户端的所有实际接收数据与存储在字节缓冲区中的“多余”数据分开,但似乎像这样应该存在,所以我不得不怀疑我是否只是遗漏了一些明显的东西,或者是否有一些低层次的原因导致无法做到这一点。
谢谢 :)
java - Java SocketChannel 没有检测到断开连接?
我有一个套接字正在运行,使用选择器。我正在尝试检查我的套接字是否连接到服务器。
它总是返回 true。我在我的电脑上关闭了 Airport(互联网连接),当我检查套接字是否连接时,它仍然返回 true。知道为什么吗?我尝试每 3 秒向服务器写入一次数据,但它仍然没有将我的套接字状态更改为断开连接。
java - 可靠地写入 Java SocketChannel
我有一个关于 java SocketChannel 的问题。
假设我在阻塞模式下打开了一个套接字通道;在调用write(ByteBuffer)方法后,我得到一个整数来描述写入了多少字节。javadoc 说: “返回:写入的字节数,可能为零”
但这究竟意味着什么?这是否意味着字节数确实已传递给客户端(以便发送方收到 tcp ack 表明服务器已接收到多少字节),或者这是否意味着字节数已写入 tcp 堆栈? (因此某些字节可能仍在等待,例如在网卡缓冲区中)。
android - Android 中的 SocketChannel
我对 Android 中的 SocketChannels 有疑问。这是我的代码:
此代码适用于 Java,但不适用于 Android。我总是得到一个 IOException 我的第一个问题是第一行。我必须添加打开套接字的权限。第一行现在有效,但第二行无效。我总是得到一个 IOException。
有什么建议么?
java - Selector.select() 开始一个无限循环
我有一个最小的 JMS 提供程序,它通过 UDP 发送主题消息并通过 TCP 将消息排队。我使用单个选择器来处理 UDP 和 TCP 选择键(同时注册 SocketChannels 和 DatagramChannels)。
我的问题是:如果我只发送和接收 UDP 数据包,一切都很顺利,但是一旦我开始在 TCP 套接字上写入(使用 Selector.wakeup() 让选择器进行实际写入),选择器就会进入无限循环,返回一个空的选择键集,并占用 100% 的 CPU。
主循环的代码(有些简化)是:
对于 UDP 发送(TCP 发送类似):
那么,这里有什么问题?我应该使用 2 个不同的选择器来处理 UDP 和 TCP 数据包吗?