我一直在嘗試在swift中編寫一個簡單的TCP/IP服務器,但我無法想出一個解決方案。我已經嘗試過在這裏和網上其他地方搜索,但我找不到適用於我正在使用的最新版本的快速版本:swift中的基本tcp/ip服務器
Apple Swift 2.1版(swiftlang-700.1。 101.6鐺-700.1.76)
目標:x86_64的-蘋果darwin14.5.0
操作系統:
的Mac OS X 10.10.5 Yosemitte
下面的代碼已經被製成,它是基於這樣一個:Socket Server Example with Swift
import Foundation
var sock_fd: Int32
var server_addr_size: Int
sock_fd = socket(AF_INET, SOCK_STREAM, 0);
if sock_fd == -1 {
print("Failure: creating socket")
exit(EXIT_FAILURE)
}
server_addr_size = sizeof(sockaddr_in)
var server_addr = NSMutableData(length: server_addr_size)!
memset(UnsafeMutablePointer<Void>(server_addr.mutableBytes), 0, server_addr_size)
var addr = UnsafeMutablePointer<sockaddr_in>(server_addr.mutableBytes)
addr.memory.sin_len = __uint8_t(server_addr_size)
addr.memory.sin_family = sa_family_t(AF_INET) // chooses IPv4
addr.memory.sin_port = 12321 // chooses the port
let bind_server = bind(sock_fd, UnsafePointer<sockaddr>(server_addr.mutableBytes), socklen_t(server_addr_size))
if bind_server == -1 {
print("Failure: binding port")
exit(EXIT_FAILURE)
}
if listen(sock_fd, 5) == -1 {
print("Failure: listening")
exit(EXIT_FAILURE)
}
var client_addr = NSMutableData(length: server_addr_size)!
memset(UnsafeMutablePointer<Void>(client_addr.mutableBytes), 0, server_addr_size)
let client_fd = accept(sock_fd, UnsafeMutablePointer<sockaddr>(client_addr.mutableBytes), UnsafeMutablePointer<socklen_t>(bitPattern: server_addr_size))
if client_fd == -1 {
print("Failure: accepting connection")
exit(EXIT_FAILURE);
}
至呼叫接受,因爲它可以通過所提到的代碼的輸出中可以看到失敗:
失敗:接受連接
程序以退出碼結束:1
除了幫助修復代碼之外,我還想知道如何讀寫連接。
謝謝,
ģOliveira的
您還需要輸出'strerror(errno)'來查看accept()失敗的原因。 –
感謝您的建議,這使得它更容易識別問題。 –