如何解决套接字编程:关于等待服务器回复,如何等待比默认超时更多的时间?
我有一个程序,该程序通过TCP
向在后台运行的另一个程序发送消息,有时该程序很忙,无法回复该程序。因此,我想知道是否有任何等待回复的方法,因为请求会在一段时间后超时。
截至目前,我已经添加了一个睡眠函数来等待忙碌的时间,但是我不是动态的,并且只是一种不好的编码习惯,因为我不知道它会忙多久。
这是我用来发送消息的代码:
func sendmsg(data: String) {
let root = XMLElement(name:"request")
let xml = XMLDocument(rootElement: root)
root.addChild(XMLElement(name: "MessageId",stringValue: "Message_ID"))
root.addChild(XMLElement(name: "operation",stringValue: data))
let x = ("<root_node">" + xml.xmlString + "</root_node>")
let dat = x
let datalen = dat.count
let datalentosend = String(format: "%.8d",datalen)
let message = datalentosend + dat
let encodeddata = [UInt8](message.data(using: .utf16LittleEndian)!)
outputStream.write(encodeddata,maxLength: encodeddata.count)
break
}
以下是我用来接收/阅读邮件的代码:
func readmsg() {
var buffer = [UInt8](repeating: 0,count: maxreadlength)
inputStream.read(&buffer,maxLength: maxreadlength)
let output = String(bytes: buffer,encoding: .utf16LittleEndian)
let out = (output!)
var substf = ""
let indx = out.range(of: "</child_node>",options: .backwards)?.lowerBound
let subst = indx.map(out.substring(to: ))
substf = (subst!) + "</child_node>"
let start = substf.index(substf.startIndex,offsetBy: 8)
let end = substf.index(substf.endIndex,offsetBy: 0)
let range = start..<end
let subs = substf[range]
finalout = String(subs)
buffer.removeAll()
}
以下是流委托的代码:
func stream(_ aStream: Stream,handle eventCode: Stream.Event) {
switch eventCode {
case .hasBytesAvailable:
print("new message recieved")
case .endEncountered:
print("Reached the end")
case .errorOccurred:
print("error occurred")
print("\(aStream.streamError?.localizedDescription ?? "")")
print("\(aStream.streamStatus.rawValue)")
dialogOKCancel(question:"Cannot Connect to agent",text:"an error occurred")
case .hasSpaceAvailable: break
default: break
}
}
我使用THIS WEBSITE中的代码作为参考编写了此代码。在该教程上,它说只要缓冲区不为空,就使用while stream.hasBytesAvailable
循环检查读取,但是为此,我需要将读取消息功能的输入参数设置为(stream: Inputstream)
,然后称它为readAvailableBytes(stream: aStream as! InputStream)
,但是每次我尝试说它都没有变量aStream
时,我甚至不确定是否会解决它。
因此,我该如何等待服务器的答复,以使我的程序在服务器繁忙时不会保持超时。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。