Swift 4 中通过 CFNetwork 的套接字服务器
Socket Server via CFNetwork in Swift 4
我是 Swift 的新人。
我正在研究编写一个纯 swift 应用程序作为套接字服务器。
代码如下
server = CFSocketCreate(kCFAllocatorDefault, AF_INET,
SOCK_STREAM, IPPROTO_TCP, callbackOpts.rawValue, {
(socket, type, address, data, info) in
print("type ->\(type)")
}, nil)
let size = MemoryLayout<sockaddr_in>.size
addr.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)
addr.sin_family = sa_family_t(AF_INET); /* Address family */
addr.sin_port = in_port_t(10001); /* Or a specific port */
addr.sin_addr.s_addr = in_addr_t(INADDR_ANY);
let addrInPtr = withUnsafeMutablePointer(to: &addr) { ptr in
return ptr.withMemoryRebound(to: UInt8.self, capacity: size){
return [=11=]
}
}
let sincfd = CFDataCreate(
kCFAllocatorDefault,
addrInPtr,
size)
let result = CFSocketSetAddress(server, sincfd)
switch result {
case .success:
print("xx sucess")
case .timeout:
print("xx timeout")
case .error:
print("xx error")
}
let runLoopSourceRef = CFSocketCreateRunLoopSource(
kCFAllocatorDefault, server, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(),
runLoopSourceRef, CFRunLoopMode.defaultMode)
当活页夹时我得到了"xx success"
我无法从客户端连接此服务器。
有人给我提示是什么问题以及如何做服务器吗?
我知道有一些第 3 方库可以做到这一点,
但我正在研究 Swift 并尝试了解如何使用 CFNetwork。
我刚发现我的问题。
这是端口号的字节顺序造成的。
代码应该是
addr.sin_port = in_port_t(CFSwapInt16HostToBig(10001))
我是 Swift 的新人。
我正在研究编写一个纯 swift 应用程序作为套接字服务器。
代码如下
server = CFSocketCreate(kCFAllocatorDefault, AF_INET,
SOCK_STREAM, IPPROTO_TCP, callbackOpts.rawValue, {
(socket, type, address, data, info) in
print("type ->\(type)")
}, nil)
let size = MemoryLayout<sockaddr_in>.size
addr.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)
addr.sin_family = sa_family_t(AF_INET); /* Address family */
addr.sin_port = in_port_t(10001); /* Or a specific port */
addr.sin_addr.s_addr = in_addr_t(INADDR_ANY);
let addrInPtr = withUnsafeMutablePointer(to: &addr) { ptr in
return ptr.withMemoryRebound(to: UInt8.self, capacity: size){
return [=11=]
}
}
let sincfd = CFDataCreate(
kCFAllocatorDefault,
addrInPtr,
size)
let result = CFSocketSetAddress(server, sincfd)
switch result {
case .success:
print("xx sucess")
case .timeout:
print("xx timeout")
case .error:
print("xx error")
}
let runLoopSourceRef = CFSocketCreateRunLoopSource(
kCFAllocatorDefault, server, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(),
runLoopSourceRef, CFRunLoopMode.defaultMode)
当活页夹时我得到了"xx success"
我无法从客户端连接此服务器。
有人给我提示是什么问题以及如何做服务器吗?
我知道有一些第 3 方库可以做到这一点, 但我正在研究 Swift 并尝试了解如何使用 CFNetwork。
我刚发现我的问题。
这是端口号的字节顺序造成的。
代码应该是
addr.sin_port = in_port_t(CFSwapInt16HostToBig(10001))