gpt4 book ai didi

java - Android套接字仅在关闭时发送

转载 作者:行者123 更新时间:2023-11-30 03:14:19 24 4
gpt4 key购买 nike

我有这个用于 Android 的小应用程序,我使用套接字连接到我的服务器。但是当我尝试将字符串从客户端发送到服务器时,它只发送字符串,当我在写完 PrintWriter.println("message") 和 PrintWriter.flush() 后关闭套接字时......

pw.println("user$" + user.getUserName() + "/" + user.getEmail() + "/" + user.getPassword());
pw.flush();
sock.close(); //Without this it doesn't work!

服务器端我有这段代码:

String message;
while((message = br.readLine()) != null) {
System.out.println("Message:" + message);
}

我已经尝试了所有方法,我在消息中添加了'\n',我使用了 BufferedWrite 等等,但是没有任何效果......

编辑:我不必完全关闭套接字,我可以调用 sock.shutdownOutput()...但这当然也是一个问题...

编辑 2:我使用的是 Nexus 7,如果有帮助的话,这是一个真实的设备。

好吧,这似乎是一个普遍的问题...我做了一个非常简单的例子(不是 android),但它仍然不起作用。如果我使用本地主机,它就可以工作,但是一旦我使用我的 IP 地址,我必须关闭 OutputStream 才能发送消息……有什么想法吗?

最佳答案

您的服务器读取完整行 (reader.readLine()),必须以 '\r'、'\n 终止' 或两者(“\r\n”)。但是您的客户端永远不会写入任何这些行终止字符(writer.write("Hello") 只会写入字符 Hello,仅此而已)。

因此,当您关闭客户端上的套接字时,服务器上的套接字-InputStream 也会关闭,并导致 readLine() 调用返回所有字符数据作为一条线。 (下一次调用 readLine() 将返回 null,因为流已经关闭)。

(我认为这正是@EJP 在他/她的回答中的意思!)

解决方案:每当一行完成时调用 writer.newLine(),或者将其包装到 PrintWriter 而不是 BufferedWriter 中。然后您可以使用许多 println(...) 方法之一。

关于java - Android套接字仅在关闭时发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20404445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com