SwiftSocket通信延迟

时间:2018-03-15 23:54:40

标签: java swift sockets tcp

我正在将Android应用程序移植到iOS平台。这是一个使用TCP套接字编程与外部ESP8266设备通信的应用程序。为了调试代码,我用Java编写了一个代码,使用IntelliJ IDE作为服务器,Xcode模拟器充当服务器。

try {
        ServerSocket serverSocket=new ServerSocket(1234);
        System.out.println("Server Started");
        System.out.println(serverSocket.getInetAddress());
        Socket socket=serverSocket.accept();
        System.out.println("Client Accepted");
        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        while(true){
            System.out.println("Got: " +bufferedReader.readLine());
            Thread.sleep(1000);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

这是使用Java的Server的代码。

switch client.connect(timeout: 10) {
    case .success:
        toggleSwitch.isEnabled=true
        connectBtn.isEnabled=false
        upArrow.isEnabled=true
        downArrow.isEnabled=true

    default:
        let alert = UIAlertController(title: "Connection Failed.", message: "SST Device is not available", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: "Default action"), style: .`default`, handler: { _ in
            NSLog("The \"OK\" alert occured.")
        }))
        self.present(alert, animated: true, completion: nil)
    }

以上是iOS设备与服务器连接的部分。

resistanceValueInt-=1
let x=client.send(string:"\(-1)")

这是客户端向服务器发送数据的地方。应用程序加载时,resistanceValueInt从0开始。并按下每个按钮增加。

我的问题是与服务器立即建立连接。虽然使用按钮的值的增量和减量不会立即显示。模拟器需要退出才能在服务器控制台中显示结果。

为什么需要关闭模拟器才能传递数据?我该如何解决?

1 个答案:

答案 0 :(得分:0)

在服务器端我使用bufferedReader.readLine()从客户端读取。 虽然在swift代码中客户端通过client.send("\(+1)")将数据写入流。这不会将新行字符附加到流。因此,Java服务器不知道数据是否完全通过,因为没有新的行字符。

因此使用了client.send("\(+1)\n")。现在服务器知道数据是正确的。这样它就可以在控制台中输出所需的输出。