【发布时间】:2017-05-05 11:28:41
【问题描述】:
我想从 Socket In swift 中获取输入流中的文件
从socket获取字符串的例子很多,但是没有找到任何获取socket文件的方法
// To connect to the server
func connect(host: String, port: Int) {
SwifterHandler.sharedInstance.FilePathSave = SwifterHandler.sharedInstance.rootDoc()
self.host = host
self.port = port
Stream.getStreamsToHost(withName: host, port: port, inputStream: &self.inputStream, outputStream: &self.outputStream)
if self.inputStream != nil && self.outputStream != nil {
self.inputStream!.delegate = self
self.outputStream!.delegate = self
self.inputStream!.schedule(in: RunLoop.current, forMode: RunLoopMode.defaultRunLoopMode)
self.outputStream!.schedule(in: RunLoop.current, forMode: RunLoopMode.defaultRunLoopMode)
self.inputStream!.open()
self.outputStream!.open()
}
}
// This is a call back func that takes care of I/O from/to the server.
// Read about this func. There are many event codes to handle.
// I just wanted to make it simple.
func stream(aStream: Stream, handleEvent eventCode: Stream.Event) {
print("Event : \(eventCode)")
if aStream != inputStream {
return
}
if eventCode == .hasBytesAvailable {
self.ReadFile()
}
}
private func ReadFile()
{
var buffer = [UInt8](repeating: 0, count: 1024)
if let fh = FileHandle(forWritingAtPath: "\(SwifterHandler.sharedInstance.FilePathSave)/test.png") {
fh.seekToEndOfFile()
while (self.inputStream!.hasBytesAvailable){
let bytesRead: Int = inputStream!.read(&buffer, maxLength: buffer.count)
if bytesRead >= 0 {
fh.write(Data(bytes: buffer))
}
}
fh.closeFile()
}
SwifterHandler.sharedInstance.SharedFile(path: SwifterHandler.sharedInstance.FilePathSave)
self.dataReadCallback!("Success Download")
InstallApp().InstallApplication()
self.dataReadCallback!("Application Installed")
}
服务器发送文件时ReadFile()不运行
【问题讨论】:
标签: ios swift file sockets inputstream