在Swift中创建一个套接字

Luk*_*kas 2 sockets xcode socketserver swift

我正在尝试快速编写一个简单的回显服务器。我发现的示例不是功能性的低级示例,还是用Objective-c编写的

我在很多事情上都失败了,我将从头开始。我无法使用更高级别的功能创建一个简单的套接字CFSocketCreate。我最终得到的是:

class EchoServer : NSObject, NSStreamDelegate
{
    private var serverSocket: CFSocketRef?

    func start()
    {
        self.serverSocket = CFSocketCreate(kCFAllocatorDefault, AF_INET, SOCK_STREAM, 0, 2, &self.acceptConnection, NSNull())
    }

    func acceptConnection(socket: CFSocketRef, type: CFSocketCallBackType, address: CFDataRef, data: UnsafePointer<Void>, info: UnsafeMutablePointer<Void>)
    {
        // Accept connection and stuff later
    }
}
Run Code Online (Sandbox Code Playgroud)

我是xcode / objectivec / swift的新手,甚至在理解错误消息时也遇到了困难。上面的代码让我简单地

EchoServer.swift:31:93:'(CFSocketRef,类型:CFSocketCallBackType,地址:CFDataRef,数据:UnsafePointer,信息:UnsafeMutablePointer)->()'不能转换为'@lvalue inout $ T10'

我什至无法做到这一点。

out*_*man 5

如果仍然有人在寻找这个问题的答案。我修改了一点代码。回调中存在一些键入问题,并且它不能是类上的函数。

import CoreFoundation

func acceptConnection(socket: CFSocket!, type: CFSocketCallBackType, address: CFData!, data: UnsafePointer<Void>, info: UnsafeMutablePointer<Void>)
{
    // Accept connection and stuff later
}

class EchoServer : NSObject, NSStreamDelegate
{
    private var serverSocket: CFSocketRef?

    func start()
    {
        self.serverSocket = CFSocketCreate(kCFAllocatorDefault, AF_INET, SOCK_STREAM, 0, 2, acceptConnection, nil)
    }
}
Run Code Online (Sandbox Code Playgroud)