【发布时间】:2023-04-03 07:39:01
【问题描述】:
正如标题所说,我在仅使用本机库将 Swift 客户端连接到 Java 服务器时遇到了一些问题。
现在我有一个 Java(客户端)到 Java(服务器)的连接,它可以完美运行,还有一个 Swift(客户端)到 Java(服务器)的连接。我的 Swift 客户端确实连接到 Java 服务器(它显示在控制台上),但我的服务器的 readFully 挂起 - 我唯一看到的是控制台上的巨大消息长度,仅此而已。
Swift 代码(发送):
func send(message: String) {
let data = "msg:\(message)".data(using: .utf8)!
data.withUnsafeBytes {
guard let pointer = $0.baseAddress?.assumingMemoryBound(to: UInt8.self) else {
print("Error joining chat")
return
}
out!.write(pointer, maxLength: data.count)
}
}
Java 服务器(读取):
int lenght = in.readInt();
System.out.println("Message: " + lenght);
if(length>0){
byte[] message = new byte[length];
in.readFully(message), 0, message.length); //This is where the problem is
}
所以,基本上 Java 服务器挂在 readFully 方法上。任何想法为什么会这样?无论我发送一个简单的字符串还是字节数组,它总是挂起,并且由于某种原因长度非常大。有人可以帮我理解我做错了什么,因为我已经在这个问题上做了好几天但仍然不理解它(对 Swift 来说仍然很新)。
非常感谢!
【问题讨论】:
-
@Sweeper 这是一个很好的收获!关于如何先发送消息长度然后只发送消息的任何想法?
标签: java swift sockets inputstream outputstream