【发布时间】:2016-02-17 02:45:06
【问题描述】:
我一直在尝试快速编写一个简单的 TCP/IP 服务器,但我想不出一个解决方案。我已经尝试在此处和其他网络上进行搜索,但找不到适用于我正在使用的最新 swift 版本的内容:
Apple Swift 2.1 版 (swiftlang-700.1.101.6 clang-700.1.76)
目标:x86_64-apple-darwin14.5.0
操作系统:
Mac OS X 10.10.5 优胜美地
以下代码已基于此: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);
}
accept 调用失败,从上述代码给出的输出中可以看出:
失败:接受连接
程序以退出代码结束:1
除了修复代码方面的帮助外,我还想知道如何在连接中读取和写入。
谢谢,
G 奥利维拉
【问题讨论】:
-
您还需要打印出
strerror(errno)以查看accept() 失败的原因。 -
感谢您的建议,这样可以更轻松地识别问题。