xcode - 在 Swift 中创建套接字

标签 xcode sockets swift socketserver

我正在尝试用 swift 编写一个简单的回显服务器。我找到的例子是 non-functional and low-levelwritten in 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
    }
}

我是 xcode/objectivec/swift 的新手,我什至很难理解错误消息。上面的代码让我简单地留下了

EchoServer.swift:31:93: '(CFSocketRef, type: CFSocketCallBackType, address: CFDataRef, data: UnsafePointer, info: UnsafeMutablePointer) -> ()' is not convertible to '@lvalue inout $T10'

我什至无法弄清楚这一点。

最佳答案

如果有人仍在寻找这个问题的答案。我稍微修改了代码。回调中存在一些打字问题,而且它不可能是类中的函数。

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)
    }
}

关于xcode - 在 Swift 中创建套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26430251/

相关文章:

c - 了解套接字创建和 select() 系统调用之间的差距

ruby-on-rails - Ruby Socket-通过Socker运行方法

iphone - Xcode:基于架构的条件build设置(设备(ARM)与模拟器(i386))

iphone - 如何从 NSString 中删除引号?

xcode - 在钥匙串(keychain)中找不到有效的 iOS 代码签名 key 。您需要申请一个代码签名证书

c++ - POSIX UDP 套接字未绑定(bind)到正确的 IP

swift - GoogleSignIn - 在 IOS 11 中始终返回 "The user canceled the sign-in flow."

Javascript 端口 var 测试 = { a : Infinity }

swift - NSUserDefaults 上的属性观察者

swift - 在带有 M1 芯片的 Xcode 12 的范围内找不到类型 '*'