【问题标题】:Swift Socket readline writelineSwift Socket readline writeline
【发布时间】:2016-01-11 09:47:36
【问题描述】:

对不起,我的第一个问题是错误;我想问的是 Swift Socket 而不是 Java

我正在尝试编写一个 Swift 客户端应用程序并连接到 Java 服务器。

我不知道如何在 Swift 客户端中使用 Socket。

我想要像下面这样的Java函数(out.println和in.readline)

谢谢

Java 代码主要取自 Oracle 示例。

PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String inputLine;

out.println("Hello World");

while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
System.out.flush();

out.println("test");

if (inputLine.equals("Bye")) {
    break;
   }
}

out.close();
in.close();
socket.close();

抱歉第一次输入错误问题

你能教我在哪里可以找到官方网站上的 Swift 实现方法吗?或教我如何实施? 非常感谢>

我的 swift 代码如下,我不知道如何获取字符串形式的 readline (inputStream)。

我写了

outputstream.write(queryString,maxLength: queryString.characters.count) 

并尝试发送到服务器。

但是服务器总是在 sendString 中接收到丢失的一些内容。

我的服务器在带有 Socket 的 Android 中没问题

let addr = "xxooo"
    let port = 10009

    var inp : NSInputStream?
    var out : NSOutputStream?

    NSStream.getStreamsToHostWithName(addr, port: port, inputStream: &inp, outputStream: &out)
    print("test1")
    let inputstream = inp!
    let outputstream = out!
    inputstream.open()
    outputstream.open()
    print("test2 queryString=\(queryString)")

      outputstream.write(queryString,maxLength:queryString.characters.count)
    print("test3 \(queryString.characters.count)")
    let buffersize = 1024
    var buffer = Array<UInt8>(count : buffersize,repeatedValue :0)

    let bytesRead = inputstream.read(&buffer, maxLength: buffersize)
    var getString : NSString?
    print("test4")

    if(bytesRead>0){
        getString = NSString(bytes: &buffer, length: bytesRead, encoding:  NSUTF8StringEncoding)
        print("getString = \(getString!)")

    }else{

    }
    inputstream.close()
    outputstream.close()

【问题讨论】:

  • TCP 套接字绝对不关心两端的编程语言。
  • 我知道但我不知道 Swift 语言如何实现。可以教教我在官网哪里可以找到吗?
  • thx @ravindra,我以前读过,但我现在不知道如何实现......你能教我示例代码吗> tutorialspoint.com/java/java_networking.htm

标签: swift sockets readline


【解决方案1】:

您必须 flush() PrintWriter 才能在 Socket 的另一端接收数据。您正在调用 System.out.flush() 而不是 PrintWriter。flush()

out.flush() // This will do the trick for you.

看看这篇关于socket programming的文章

编辑:

在任何编程语言中,套接字通信机制都保持不变,只是函数名称发生了变化。

服务器:

1) 创建一个ServerSocket

2) 在无限循环中接受客户端套接字

3) 在 Client Socket 上打开 OutputStream 并写入数据。

4) 打开 InputStream 读取数据

客户

1) 在特定 IP 和端口上打开到服务器的套接字

2) 在 Socket 上打开 OutputStream

3) 将数据写入 Stream(在带有 Writers 的 Stream 的包装器上)

4) 打开 Input Stream 读取数据

查看Question 以了解套接字的快速客户端实现。

看看 Swift 客户端和 Java 服务器 articleSE question

【讨论】:

  • 对不起,也许我的英语不太好。我想问答案是 Swift 而不是 Java。谢谢你的回复>
  • QQ我发现我的问题是错误的,我在哪里可以编辑,我现在尝试找到
  • 我试过了,但我不知道如何从 readline (inputStream) 中获取字符串。我写了 outputstream.write(sendString,maxLength: sendString.characters.count) 并尝试发送到服务器。但是服务器总是在 sendString 中接收到丢失的一些内容 我的服务器在 Android 中可以使用 Socket 。谢谢你@ravindra
  • 您可以在问题中添加您的 swift 客户端代码吗?
  • 看看:stackoverflow.com/questions/28655425/how-to-test-if-my-remote-socket-nsstream-are-correctly-open
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
相关资源
最近更新 更多