joh*_*hni 12 sockets input stream output swift
如果我想连接到服务器,在Java中我会打开一个Socket并用端口和主机地址初始化它,然后检索输入/输出流并读/写我想要的任何内容.
在Swift中我很难这样做,因为它不是那样构建的,我真的希望看到一个如何连接到服务器,检索流并使用它们的简单示例.
这是经过@Grimxn引用的测试代码.
var host = "http://google.com"
var readStream :CFReadStreamRef
var writeStream :CFWriteSteamRef
var socket = CFStreamCreatePairWithSocketToHost(nil, host, 80, readStream, writeStream)
Run Code Online (Sandbox Code Playgroud)
初始化上面的两个流也需要使用我一无所知的CFAllocator.使用kCFAllocatorDefault没有太大帮助,相同的错误.
上面的代码返回此错误:无法将表达式的类型'Void'转换为类型UInt32.
例如,当我使用UInt32(80)构造UInt32时,错误是:找不到接受所提供参数的'init'的重载.
我感谢任何帮助!
joh*_*hni 29
我自己已经想到了,因为那些寻求解释的人会提前阅读;
有多种方法可以使用套接字与本地应用程序或远程服务器进行通信.
原帖中描述的问题是获取输入/输出流并使它们工作.(在这篇文章的最后,有一篇关于我的另一篇文章的参考资料,解释了如何使用这些流)
该NSStream类有称为静态方法(在迅速类的函数)getStreamsToHost.所有你必须准备的是一个NSHost对象,用一个真实的主机地址,一个端口号,一个NSInputStream obj的引用以及一个NSOutputStream obj初始化.然后,您可以使用此处显示的流并在参考文章中进行说明.
看看这个简单的代码;
let addr = "127.0.0.1"
let port = 4000
var host :NSHost = NSHost(address: addr)
var inp :NSInputStream?
var out :NSOutputStream?
NSStream.getStreamsToHost(host, port: port, inputStream: &inp, outputStream: &out)
let inputStream = inp!
let outputStream = out!
inputStream.open()
outputStream.open()
var readByte :UInt8 = 0
while inputStream.hasBytesAvailable {
inputStream.read(&readByte, maxLength: 1)
}
// buffer is a UInt8 array containing bytes of the string "Jonathan Yaniv.".
outputStream.write(&buffer, maxLength: buffer.count)
Run Code Online (Sandbox Code Playgroud)
在执行这个简单的代码之前,我启动了ncat来监听终端中的端口4000并输入"Hello!" 然后打开插座进行通信.
Jonathans-MacBook-Air:~ johni$ ncat -l 4000
Hello !
Jonathan Yaniv.
Jonathans-MacBook-Air:~ johni$
Run Code Online (Sandbox Code Playgroud)
启动代码后,您可以看到我已经在套接字关闭之前收到了字符串"Jonathan Yaniv.\n"到终端.
我希望这给你们中的一些人带来了一些麻烦.如果你有更多问题请试一试,我希望我能够回答它.
这篇文章解释了&符号. (参考NSInputStream读取使用)
| 归档时间: |
|
| 查看次数: |
21012 次 |
| 最近记录: |