我正在将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开始。并按下每个按钮增加。
我的问题是与服务器立即建立连接。虽然使用按钮的值的增量和减量不会立即显示。模拟器需要退出才能在服务器控制台中显示结果。
为什么需要关闭模拟器才能传递数据?我该如何解决?
答案 0 :(得分:0)
在服务器端我使用bufferedReader.readLine()
从客户端读取。
虽然在swift代码中客户端通过client.send("\(+1)")
将数据写入流。这不会将新行字符附加到流。因此,Java服务器不知道数据是否完全通过,因为没有新的行字符。
因此使用了client.send("\(+1)\n")
。现在服务器知道数据是正确的。这样它就可以在控制台中输出所需的输出。