写入套接字输出流而不关闭它
我想向服务器写入一些消息。 每次,仅对于传输,我都会关闭输出流,并在必须发送下一条消息时重新打开它。
os.write(msgBytes);
os.write("\r\n".getBytes());
os.flush();
os.close();
如何保持该 Socket 的 OutputStream, os, 打开并且仍然能够发送消息?
谢谢。
I'd like to write some messages to the server.
Each time, for the tramsmitting only, I'm closing the outputStream and reopen it when I have to send the next message.
os.write(msgBytes);
os.write("\r\n".getBytes());
os.flush();
os.close();
How Can I keep this Socket's OutputStream, os, open and still be able to send the message?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我在这里缺少一些东西。如果不调用close,则不会关闭。例如,
I am missing something here. If you don't call close, it will not close. For example,
在大多数协议中,服务器接受某种 EOF 符号。发送这样的符号而不是关闭流。
例如,IRC 服务器将“\r\n”解释为消息的结尾。这将是一个打开的 OutputStream 上的 2 条消息:
此外,您应该使用 DataOutputStream 包装您的 outputStream。该包装器创建更便携的输出。如果服务器和客户端具有不同的计算机体系结构,则普通 OutputStream 可能会导致某些原始数据类型出现问题。
In most protocols, the server accepts som kind of EOF symbol. Send such a symbol instead of closing the stream.
For example, IRC servers interpret "\r\n" as the end of a message. This would be 2 messages on one open OutputStream:
Also, you should wrap your outputStream with DataOutputStream. This wrapper creates more portable output. Plain OutputStream can cause trouble with certain primitive datatypes if server and client have different computer architectures.
将
Socket
的OutputStream
包装在PrintWriter
中,并调用PrintWriter
的println
> 方法。Wrap the
Socket
'sOutputStream
in aPrintWriter
and call thePrintWriter
'sprintln
method.我发现问题出在客户端。
在客户端,我使用了 -
这意味着客户端等待服务器的outputStream关闭,然后处理传入的数据。
I have found the problem and it lays on the client's side.
On the client, I have used -
That means, the client waits till server's outputStream closed, and then processing the incoming data.