如何在swift中打开多个套接字连接?

时间:2015-11-20 13:45:43

标签: ios swift sockets mobile

我将我为Android编写的应用程序移植到ios,我无法打开超过1个连接到我的服务器。我的Android应用程序使用2个套接字连接到我的服务器(我的服务器正在侦听端口4444和4445),并且两者都需要来回传输不同类型的数据。 我迅速尝试这样做:

        var inp : NSInputStream?
        var out : NSOutputStream?

        var inStreamUnmanaged:Unmanaged<CFReadStream>?
        var outStreamUnmanaged:Unmanaged<CFWriteStream>?
        CFStreamCreatePairWithSocketToHost(nil, host, UInt32(port), &inStreamUnmanaged, &outStreamUnmanaged)
        var inStreamUnmanaged2:Unmanaged<CFReadStream>?
        var outStreamUnmanaged2:Unmanaged<CFWriteStream>?
        CFStreamCreatePairWithSocketToHost(nil, host, UInt32(port2), &inStreamUnmanaged2, &outStreamUnmanaged2)
        inp = inStreamUnmanaged?.takeRetainedValue()
        out = outStreamUnmanaged?.takeRetainedValue()

        out!.open()
        inp!.open();

        let str = "Hello"
        var x = [UInt8](str.utf8)
        out!.write(&x, maxLength: x.count)

        var readByte :UInt8 = 0
        while inp!.hasBytesAvailable {
            inp!.read(&readByte, maxLength: 1)
        }

连接到我的服务器:

                    clientSocket =serverSocket.accept();
                System.out.println("0-new connection");
                nSocket = nSSocket.accept();
                System.out.println("1-new connection");

但是,只有第一条消息打印在服务器控制台中。我在swift中仔细检查了辅助端口的值,它确实是4445,一切看起来都正确。有什么问题?

1 个答案:

答案 0 :(得分:0)

    var inp : NSInputStream?
    var out : NSOutputStream?

    var inStreamUnmanaged:Unmanaged<CFReadStream>?
    var outStreamUnmanaged:Unmanaged<CFWriteStream>?
    CFStreamCreatePairWithSocketToHost(nil, host, UInt32(port), &inStreamUnmanaged, &outStreamUnmanaged)

// YOU never use this in your code !!!
    var inStreamUnmanaged2:Unmanaged<CFReadStream>?
    var outStreamUnmanaged2:Unmanaged<CFWriteStream>?


    CFStreamCreatePairWithSocketToHost(nil, host, UInt32(port2), &inStreamUnmanaged2, &outStreamUnmanaged2)
    inp = inStreamUnmanaged?.takeRetainedValue()
    out = outStreamUnmanaged?.takeRetainedValue()

    out!.open()
    inp!.open();

    let str = "Hello"
    var x = [UInt8](str.utf8)
    out!.write(&x, maxLength: x.count)

    var readByte :UInt8 = 0
    while inp!.hasBytesAvailable {
        inp!.read(&readByte, maxLength: 1)
    }

...

var inp2 : NSInputStream?
var out2 : NSOutputStream?
.....
inp2 = inStreamUnmanaged2?.takeRetainedValue()
out2 = outStreamUnmanaged2?.takeRetainedValue()
.....
// and use it!

在打开流

之前,不会创建基础连接