我试图修复一个java套接字通信错误,服务器不知道输入消息的长度。在当前情况下,服务器测试输入是否完成inputStream.available();
方法。然而,这种方法并不总是返回正确答案。它会导致读取部分输入。似乎有两种不同的可能性来解决这个问题。
>
客户端应该在发送后关闭其输出流,但这会导致客户端不读取响应,因为输出流关闭时套接字也会关闭。
有没有其他建议,特别是在nio包的帮助下?
非常感谢。
至少还有另外两种方法没有提及,可能应该提及。
>
使用特殊字符表示某个输入的结尾。如果输入中不允许有新行,则\r\n
是一个选择。
使用某种序列化-您可以将数据作为JSON对象或XML之类的格式发送,这样您就知道什么时候没有更多的数据了。
available()
不是消息长度的度量值,因此如果“正确答案”的定义是“消息长度”,则没有理由返回“正确答案”。
如果您想要消息长度,您必须发送一个。或者使用行或自描述协议,如XML、序列化等。
你可以用
socket.shutdownOutput();
关闭客户端的输出流。这将显示为关闭的输入流,而不关闭套接字。
顺便说一句:你不能使用套接字。GetOutputStream()。关闭() 我认为你可以。
IMHO发送长度是最佳选择,因为这将允许您使用同一套接字发送多个请求。
下面是一个例子
public class SimpleServerMain {
public static void main(String... args) throws IOException, InterruptedException {
ServerSocket ss = new ServerSocket(54321);
Socket s = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
for (String line; (line = br.readLine()) != null; )
System.out.println("Got " + line);
PrintStream ps = new PrintStream(s.getOutputStream());
for (String word : "Hello World Bye Bye!".split(" ")) {
ps.println(word);
Thread.sleep(1000);
}
s.close();
ss.close();
}
}
和
public class SimpleClientMain {
public static void main(String... args) throws IOException {
Socket s = new Socket("localhost", 54321);
InputStream inputStream = s.getInputStream();
s.getOutputStream().write("Hello\n".getBytes());
s.shutdownOutput();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
for (String line; (line = br.readLine()) != null; )
System.out.println("Got " + line);
System.out.println("Disconnected.");
s.close();
}
}
问题内容: 不知道频道 长度时,我无法关闭频道 它给我错误 这是合乎逻辑的-当第二个goroutine关闭通道试图发送给它时,它关闭了它。在这种情况下关闭渠道的最佳方法是什么? 问题答案: 通道关闭后,您将无法在该通道上发送更多值,否则会出现混乱。这就是您的经验。 这是因为您启动了使用同一个通道的多个goroutine,并且它们在该通道上发送值。然后关闭每个通道。而且由于它们未同步,因此一旦第一个
Netty TCP Server在端口处运行,接收格式的数据。它使用Marine API库将胡言乱语转换为需要从套接字输入流的有意义的信息。 如何获得正在使用的netty服务器端口的输入流?
问题内容: 我有这个功能(将代码示例的HTML标记剥离)从CSV构建HTML表,但是每次尝试运行它时都会遇到运行时错误,但我不知道为什么。谷歌说,也许编码有些错误,但是我不知道如何更改。 我的CSV以ANSI编码,并包含ä,Ä,Ü,Ö等字符,但我无法控制编码,或者将来是否会更改。 错误发生在这里: 121行是 源代码: 问题答案: 您可以尝试通过使用方法(javadocs)的形式来利用正确的编码。
本文向大家介绍jQuery 限制输入字符串长度,包括了jQuery 限制输入字符串长度的使用技巧和注意事项,需要的朋友参考一下 我们后台做程序的时候,比如录入一篇文章,文章会有摘要,我们希望文章的字符长度是我们可以控制的,我们不希望它太长,比如限制只能输入250个字符,下面的代码实现了这种功能。 先来看一下效果图 代码如下: 以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持呐喊教程
问题内容: 我让我的用户以HTML形式添加数字输入,并用值填充它们。该表单在提交时被序列化,并发送到一个PHP文件,该文件使用PDO将数据插入到MySQL数据库中。数据库表中有一堆列,用于存储表单中的其他值,但是用于存储用户添加的输入的列的设置如下: 这些列允许使用,因为我根本不知道用户是否会添加任何数字输入。 有没有更好的方法来存储这些数字? 以下是我的JS的一部分,用于获取表单数据并将其发送到
我想为Netty处理程序使用不同于套接字的输入。这可能吗?如果是这样,什么是有效的输入格式?