How to implement a client-server model with sockets in iOS Swift

I am new to iOS Swift. I want to develop a socket based server application in Swift, but I get the following error messages:

input: ErrorOccurred: Optional("Error Domain=NSPOSIXErrorDomain Code=61 \"The operation couldn’t be completed. Connection refused\"") 

input: ErrorOccurred: Optional("Error Domain=NSPOSIXErrorDomain Code=61 \"The operation couldn’t be completed. Connection refused\"")

Both servers and clients are running on the same computer. What am I doing wrong?

Server:

import Foundation 
class Server: NSObject, NSStreamDelegate {
let serverAddress: CFString = "127.0.0.1"
let serverPort: UInt32 = 2005
private var inputStream: NSInputStream!
private var outputStream: NSOutputStream!
func connect() {
    print("connecting...")
    var readStream:  Unmanaged<CFReadStream>?
    var writeStream: Unmanaged<CFWriteStream>?
    CFStreamCreatePairWithSocketToHost(nil, self.serverAddress, self.serverPort, &readStream, &writeStream)
    self.inputStream = readStream!.takeRetainedValue()
    self.outputStream = writeStream!.takeRetainedValue()

    self.inputStream.delegate = self
    self.outputStream.delegate = self

    self.inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
    self.outputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)

    self.inputStream.open()
    self.outputStream.open()
}
func stream(stream: NSStream, handleEvent eventCode: NSStreamEvent) {
    print("stream event \(stream)   \(eventCode)")

    switch eventCode {
    case NSStreamEvent.ErrorOccurred:
        print("input: ErrorOccurred1: \(stream.streamError?.description)")
    case NSStreamEvent.OpenCompleted:
        print("input: OpenCompleted1")
    case NSStreamEvent.HasBytesAvailable:
        print("input: HasBytesAvailable1")
    default:
        break
    }
    let bufferSize = 1024
    var buffer = Array<UInt8>(count: bufferSize, repeatedValue: 0)

    let bytesRead = self.inputStream.read(&buffer, maxLength: bufferSize)
    if bytesRead >= 0 {
        let output = NSString(bytes: &buffer, length: bytesRead, encoding: NSUTF8StringEncoding)
        print("==================== stream event \(output)")
    } else {
        // Handle error
    }
  }
} 
let server = Server()
server.connect()
let now:NSDate = NSDate()
let until:NSDate = now.dateByAddingTimeInterval(120)
NSRunLoop.currentRunLoop().runUntilDate(until)
+4
source share

Source: https://habr.com/ru/post/1605610/


All Articles