问题标签 [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 - 我们可以使用 java socketchannel 与基于 c 的 TCP 服务器通信吗
我们可以使用socketchannel与基于c++的TCP服务器通信吗
java - 如何将char数组写入java socketchannel
如何将 char 数组写入 java socketchannel。我无法将 char 数据写入 socketchannel,因为它需要 ByteBuffer。
java - Java NIO SocketChannel 读取预定义字节数
我有一个 Java NIO 套接字服务器。
服务器正在JSONObjects
从远程客户端获取。我正在使用该SocketChannel.read(ByteBuffer)
方法从频道中读取。每条消息都以 '\n' 结尾,这标志着当前消息的结束。
我的问题是,有时该read()
方法会读取更多字节并到达 '\n'.. 有没有办法让我从SocketChannel
唯一读取直到找到 '\n' ?我想过可能逐字节读取(我只是找不到有关如何实现它的文档..)?
还有其他解决方案吗?
java - Java NIO read() 流结束
我正在使用 Java NIO 在我的服务器中接受、读取和写入。
在文档中它说该SocketChannel.read()
函数将返回从套接字读取的字节数,如果到达流的末尾则返回-1。
现在 - 我真的不明白是什么"End Of Stream"
意思?它和borken pipe
错误一样吗?
这是否意味着双方的连接都丢失了,我应该关闭 SocketChannel ?
如果有人可以对此进行更多解释,我会非常满意-并给出一些根据它正确使用和行为的示例..
java - 线程的 Java 开销。我应该使用套接字还是套接字通道?
我有两个用 Java 编写的即时消息程序设计
第一个想法使用 2 个单独的线程。第一个线程忽略 gui 并通过写入阻塞套接字发送即时消息数据。第二个线程使用另一个阻塞套接字来监视来自朋友的传入数据包。我不确定使用线程是否是解决此问题的最佳方法,但我发现它比使用非阻塞套接字通道更容易处理。
我的第二种设计是在一个线程中使用非阻塞套接字通道,它偶尔会检查是否有传入或传出数据。这种设计的好处是我不必担心线程之间的资源共享,但我不确定它是否更有效。
老实说,我真正关心的只是制作一个运行平稳高效的程序。你认为什么是更有效和更容易构建的设计?我只是在玩,所以除了我的感觉告诉我之外,我没有构建高效和强大的客户端/服务器程序的经验。
java - Java nio read() 返回 -1
这不是我第一次尝试理解这个问题,但我希望这将是最后一个:
一些背景:
我有一个Java SocketChannel NIO
在非阻塞模式下工作的服务器。
该服务器有多个客户端,它们从它发送和接收消息。
"keepalive"
每个客户端每隔一段时间就通过消息保持与服务器的连接。服务器的主要思想是客户端将“一直”保持连接并以“推送”模式接收来自它的消息。
现在我的问题:
在 Java NIOread()
函数中 - 当 read() 返回 -1 - 这意味着它的 EOS。
在我在这里提出的问题中,我意识到这意味着套接字已完成其当前流并且不需要关闭..
当在谷歌搜索更多关于这个时,我发现这确实意味着连接在另一边关闭..
“流”这个词到底是什么意思?它是从客户端发送的当前消息吗?客户端连接是否有能力发送更多消息?
如果客户从未告诉他关闭,为什么会
SocketChannel
在客户端关闭?read()
返回 -1 和对等 I/O 错误重置连接有什么区别?
这就是我阅读的方式SocketChannel
:
java - Socket vs SocketChannel
I am trying to understand SocketChannels, and NIO in general. I know how to work with regular sockets and how to make a simple thread-per-client server (using the regular blocking sockets).
So my questions:
- What is a SocketChannel?
- What is the extra I get when working with a SocketChannel instead of a Socket.
- What is the relationship between a channel and a buffer?
- What is a selector?
- The first sentance in the documentation is
A selectable channel for stream-oriented connecting sockets.
. What does that mean?
I have read the also this documentation, but somehow I am not getting it...
java - can we use selector concept in client side programming
I am developing an android application where it has to talk to multiple TCP based servers in run time. Now i am using java sockets to communicate and threads to handle multiple clients. But there is a requirement in application that we need to talk to more numbers of servers in run time. So i am using the concept of Java NIO with selectors to handle multiple servers at a time. But the problem now i am facing is that i am not able to communicate with any of the servers. So please any one suggest can i use selector at client side.
java - 使用 IO 多路复用的 Java 回显服务器客户端
我对客户端服务器和 Java 编程都比较陌生。有一个任务要做,我坚持使用这个程序来用 java 编写一个 echo 客户端和服务器。我总是在这里找到我的答案,所以我再次求助于 stackoverflow。
这是服务器:
}
这是客户:
}
错误是服务器因此错误而终止:线程“main”中的异常 java.lang.ClassCastException: sun.nio.ch.Util$2 cannot be cast to java.util.ArrayList at Server_select.main(Server_select.爪哇:40)
我只是想知道其余的都好吗?我想澄清我对此的一些其他疑问。提前致谢 :)
java - 如何切换socketchannel的阻塞模式?
我用来SocketChannel
从客户端的服务器接收 TCP 流。例如:
然后,我可以使用该selector.select()
方法来处理阅读问题。
使用具体句柄,考虑到我想使用 InputStream(我想读取流线)从服务器端接收 tcp 流,有两种方法。一种是 using channel.socket()
,另一种是使用 Channels。这里我使用channel.socket()
,例如:
好的,现在我读完了一次tcp流。为了继续使用选择器,我应该将通道阻塞模式设置为false。
问题是,channel和selector组合的key被取消了,我想重新注册我的channel,怎么办?似乎如果我mychannel.register(selector, SelectionKey.OP_READ)
在①上再次使用,它会抛出Exception
.
我的 run() 方法代码如下:
它抛出的异常是: