Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SwiftSocket通信延迟_Java_Swift_Sockets_Tcp - Fatal编程技术网

Java SwiftSocket通信延迟

Java SwiftSocket通信延迟,java,swift,sockets,tcp,Java,Swift,Sockets,Tcp,我正在将Android应用程序移植到iOS平台。这是一个使用TCP套接字编程与外部ESP8266设备通信的应用程序。为了调试代码,我用Java编写了一个代码,使用IntelliJIDE作为服务器,Xcode模拟器作为服务器 try { ServerSocket serverSocket=new ServerSocket(1234); System.out.println("Server Started"); System.out.println(s

我正在将Android应用程序移植到iOS平台。这是一个使用TCP套接字编程与外部ESP8266设备通信的应用程序。为了调试代码,我用Java编写了一个代码,使用IntelliJIDE作为服务器,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();
    }
resistanceValueInt-=1
let x=client.send(string:"\(-1)")
这是使用Java的服务器的代码

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设备与服务器连接的部分

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();
    }
resistanceValueInt-=1
let x=client.send(string:"\(-1)")
这是客户端向服务器发送数据的地方。应用程序加载时resistanceValueInt从0开始。并在每次按下按钮时递增

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

为什么需要关闭模拟器以交付数据?如何修复它?

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


因此使用client.send\+1\n。现在服务器知道数据已正确通过。以便在控制台中打印所需的输出。

这个问题非常令人困惑。而且,看起来你正在做一个循环睡眠。使用闭包肯定有更好的方法吗?我希望你不是想睡大觉。也许这就是你必须退出模拟器的原因?不过,这个问题对我来说还是很不清楚。