Swift Socket readline writeline [英] Swift Socket readline writeline

查看:64
本文介绍了Swift Socket readline writeline的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Sorry my first question is error; I want to ask for Swift Socket not Java

我正在尝试编写一个 Swift 客户端应用程序并连接到 Java Server.

I am trying to write a Swift client app and connect to Java Server.

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

I don't know how to use Socket in Swift client.

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

I want to have like below Java function(out.println and in.readline)

谢谢

Java 代码主要取自 Oracle 示例.

The Java code was taken mostly from an Oracle example.

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();

抱歉第一次输入错误问题

Sorry for typing error question first time

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

Can u teach me where can I find how to implement by Swift in official website? or teach me how to implement ? thx much ><

我的 swift 代码在下面,我不知道如何获取 String 表单 readline (inputStream).

my swift code is below, and I don't know how to get String form readline (inputStream).

然后我写

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

并尝试发送到服务器.

and try to send to server.

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

But server always receives lost some content in sendString.

我的服务器在 Android 中可以使用 Socket

My server is ok in Android with Socket

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()

推荐答案

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

You have to flush() PrintWriter to receive data on other end of Socket. You are calling System.out.flush() and not PrintWriter out.flush()

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

看看这篇关于套接字编程

在任何编程语言中,除了函数名称的变化外,套接字通信机制保持不变.

In any programming language, the socket communication mechanism remains same except change in function names.

服务器:

1) 创建一个 ServerSocket

1) Create a ServerSocket

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

2) Accept a Client Socket in a infinite loop

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

3) Open OutputStream on Client Socket and write data.

4) 打开 InputStream 读取数据

4) Open InputStream to read the data

客户

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

1) Open a Socket to Server on a particular IP & port

2) 在 Socket 上打开 OutputStream

2) Open OutputStream on the Socket

3) 将数据写入流(在流的包装器上使用 Writer)

3) Write Data to the Stream (on wrapper of the Stream with Writers)

4) 打开输入流读取数据

4) Open Input Stream to read the data

看看这个问题 用于套接字的快速客户端实现.

Have a look at this Question for swift client implementation of socket.

看看 Swift 客户端和 Java 服务器 文章SE 问题

Have a look at Swift client and Java server article and SE question

这篇关于Swift Socket readline writeline的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆