gpt4 book ai didi

java - 消除通过 tcp/ip 发送字符串的延迟

转载 作者:行者123 更新时间:2023-12-01 15:50:46 25 4
gpt4 key购买 nike

我的项目有一个灯开关,它有一个 IP 地址和端口,并接受字符串进行控制。我正在尝试创建一个应用程序来打开和关闭此功能。我的代码可以工作,但是在第一次单击之后,下一次单击和实际切换的开关之间存在显着的延迟。

我有一个打开和关闭的按钮。 main.java:

package com.android.lswitch;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class lightswitch extends Activity {
/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// Handle swon button
Button swon = (Button) findViewById(R.id.swon);
swon.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
sw(true);
}
});

// Handle swoff button
Button swoff = (Button) findViewById(R.id.swoff);
swoff.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
sw(false);
}
});


}

private void sw(boolean swstate) {
if (swstate == true) {
Thread swonThread = new Thread(new swon());
swonThread.start();
}

if (swstate == false) {
Thread swoffThread = new Thread(new swoff());
swoffThread.start();
}

}
}

和java上的按钮: 包 com.android.lswitch;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

public class swon implements Runnable {
public static final String SERVERIP = "10.0.0.25";
public static final int SERVERPORT = 4000;


public void run(){
try {
InetAddress serverAddr = InetAddress.getByName(SERVERIP);

Socket socket = new Socket(serverAddr, SERVERPORT);

String swon = "A55A6B0550000000FFFBDE0030C8";
String but0 = "A55A6B0500000000FFFBDE002066";

PrintWriter out = new PrintWriter( new BufferedWriter
( new OutputStreamWriter(socket.getOutputStream())),true);

out.println(swon);
out.println(but0);
socket.close();
} catch(Exception e) {
}
finally {

}
}
}

按钮关闭实际上是相同的,但具有不同的字符串。我是 android 编码(和 java 编码)的新手,所以看不出问题在哪里。我需要在某处冲洗琴弦吗?或者有更好的方法来处理这个项目吗?

干杯

最佳答案

PrintWriter 可能会被缓冲,因此在对底层套接字发出任何 close() 操作之前,您绝对应该对其进行 flush() 操作。

最好调用 PrintWriter.close() 而不是 Socket.close(),例如,在 finally block 中,如:

PrintWriter out = new PrintWriter( new BufferedWriter
( new OutputStreamWriter(socket.getOutputStream())),true);

try {
out.println(swon);
out.println(but0);
out.flush();
} finally {
out.close();
}

关于java - 消除通过 tcp/ip 发送字符串的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6096778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com