该程序包括我必须从Android应用程序发送一个字节到Wifi接入点,然后该字节由硬件设备解释。
我可以向客户端发送字节并且它正确接收字节(和更多字节,不知道原因,可能是因为协议)。硬件过滤协议字节,只捕获正确的字节。
我是如何发送它的(先前在另一种方法中创建的字节,但它是正确的):
public static void sendByte (Byte data) throws IOException {
DataOutputStream output;
Socket client;
client = new Socket("1.2.3.4", 2000);
output = new DataOutputStream(client.getOutputStream());
output.write(data);
output.close();
client.close();
Log.w("INFO","Data sended");
}
当我发送字节时,硬件部分会改变灯光的颜色,并且它会成功发生。
我也推出了这3行:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
直到这里没有问题。
然后我也希望从硬件字节接收。想象一下有人改变那种光的颜色,我想知道它。所以我创建了一个接收方法:
public static String readByte() throws IOException{
InputStream input;
DataInputStream iData;
String data = null;
try {
byte[] bytes = {0, 0, 0, 0, 0, 0, 0, 0};
Socket server = new Socket(2000);
Socket client = server.accept();
input = client.getInputStream();
iData = new DataInputStream(input);
Scanner scanner = new Scanner(iData);
iData.skip(0);
iData.read(bytes, 0, 8);
data = bytesToHex(bytes); //A simple method that change bytes to hex, this method it's correct
Log.w("READ", "" + data);
input.close();
client.close();
server.close();
}catch(IOException e){
Log.w("EROR","No es pot conectar");
}
return data;
}
在这里,我创建了一个连接到客户端以获取数据的服务器(我不知道是否需要创建服务器)。问题是我总是收到7个字节,它们总是一样的,我用skip(7)来跳过协议字节,但后来我再也收不到字节了。
我知道硬件通过我连接的wifi发送字节,但我无法抓住它们。
_________整理_________
我认为问题在于我无法捕获字节,因为硬件部分只是发送给我,而我的Android应用程序无法存储它。我想在硬件发送给我时读取字节,或类似的东西。我搜索了各处的方法和对象属性,我无法找到解决方案:(
感谢您的关注。 想知道ServerSocket是否是绝对必要的。
答案 0 :(得分:0)
当java程序向硬件发送数据时,那时java程序是客户端,硬件是服务器。
当硬件向java程序发送数据时,硬件是客户端,你的java程序是服务器。
因此,在你的java程序中,你需要有两个线程,一个客户端线程(带有一个Socket来发送字节)和一个服务器线程(带有一个ServerSocket,例如,在端口8999上)来接收字节。
要让硬件向您发送字节,需要以下详细信息。 1.运行java程序的设备的IP地址或主机名。 2. ServerSocket正在侦听的端口(在我们的例子中为8999)。
如果您的硬件手册说它可以向您发送数据,那么,我相信您可以在某处配置这些详细信息。 (我不确定您的硬件是什么。所以,请查看有关如何配置这些详细信息的硬件手册。)
有时,设备可以在您打开的同一个Socket上发送响应。 (同样,我不知道如何在你的硬件中完成它。请参阅你的硬件手册)。在这种情况下,请保持套接字打开并在单独的线程中读取它。