解决:能够比我想象的更早地测试它。结果我的服务器端代码是正确的,我不经常检查客户端变量的变化。现在工作得很好。
我正在进行一个侧面项目,我正在使用服务器与客户端进行通信。每当java服务器向android客户端发送更新时,它就会在第一次运行时运行。之后,客户端没有注册服务器的消息,因为当它在第一次运行时工作时,我已经关闭了套接字,所以我尝试了不同的方法。
我尝试只通过func detectFaces(image: UIImage) {
let detectFaceRequest = VNDetectFaceRectanglesRequest { (request, error) in
if let results = request.results as? [VNFaceObservation] {
for faceObservation in results {
let boundingRect = faceObservation.boundingBox
let transform = CGAffineTransform(scaleX: 1, y: -1).translatedBy(x: 0, y: -self.mainImageView.frame.size.height)
let translate = CGAffineTransform.identity.scaledBy(x: self.mainImageView.frame.size.width, y: self.mainImageView.frame.size.height)
let facebounds = boundingRect.applying(translate).applying(transform)
let mask = CAShapeLayer()
var maskLayer = [CAShapeLayer]()
mask.frame = facebounds
mask.backgroundColor = UIColor.yellow.cgColor
mask.cornerRadius = 10
mask.opacity = 0.3
mask.borderColor = UIColor.yellow.cgColor
mask.borderWidth = 2.0
maskLayer.append(mask)
self.mainImageView.layer.insertSublayer(mask, at: 1)
}
}
let vnImage = VNImageRequestHandler(cgImage: image.cgImage!, options: [:])
try? vnImage.perform([detectFaceRequest])
}
数据,只有在我读完数据时关闭它,但即使我flush()
除非我实际上没有工作。我的最终目标是通过服务器发送数据,并在我发送数据后立即在客户端显示数据。我只是对如何在不关闭套接字或流的情况下连续从服务器向客户端发送数据感到困惑(如果重要的话,我使用OutputStreamWriter)。
我现在无法发布我的代码,因为我几个小时都无法访问它。我尝试过的一些事情是将setTcpNoDelay设置为true并发送&通过字节流接收它,但这没有用。下面是一些伪代码,可以让您了解客户端和服务器的外观。
服务器:
flush()
客户端:
Open the server socket and make the client socket accept the server socket
While the user doesnt quit...
Enter a value to send to the client and
try
sendData(). After that,
close the outputstreamwriter
sendData(String data) -
Declare an outputstreamwriter(Calling it out)
out.write(data)
out.flush()
编辑:通过做一些研究,数据不会立即发送,因为它被缓冲了吗?如果这是正确的,有没有办法加快这个过程?(抱歉,如果这听起来很愚蠢)
答案 0 :(得分:0)
我认为更好的选择是以相反的方式实施协议。也就是说,让客户端在服务器中查询计时器任务中的更新,而不是从服务器推送更新。
答案 1 :(得分:0)
这是一个基本问题,所以到目前为止你还不是这个问题的独特之处。基本上,服务器无法启动与客户端的通信。服务器服务于来自客户端的请求,并且无法启动通信。在许多情况下,服务器不知道也不关心他将服务多少客户。另一方面,同步通信意味着请求 - 响应周期应该很短,即。您不希望长时间或无限期地保持请求连接。因此,有很多不同的方法可以让服务器开始与客户交谈。
这两种解决方案是最常见的解决方案,但不仅仅是解决方案。