socket客户端如何在客户端发送数据时从客户端捕获数据?

时间:2014-07-18 10:05:26

标签: java android client byte send

该程序包括我必须从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是否是绝对必要的。

1 个答案:

答案 0 :(得分:0)

当java程序向硬件发送数据时,那时java程序是客户端,硬件是服务器。

当硬件向java程序发送数据时,硬件是客户端,你的java程序是服务器。

因此,在你的java程序中,你需要有两个线程,一个客户端线程(带有一个Socket来发送字节)和一个服务器线程(带有一个ServerSocket,例如,在端口8999上)来接收字节。

要让硬件向您发送字节,需要以下详细信息。 1.运行java程序的设备的IP地址或主机名。 2. ServerSocket正在侦听的端口(在我们的例子中为8999)。

如果您的硬件手册说它可以向您发送数据,那么,我相信您可以在某处配置这些详细信息。 (我不确定您的硬件是什么。所以,请查看有关如何配置这些详细信息的硬件手册。)

有时,设备可以在您打开的同一个Socket上发送响应。 (同样,我不知道如何在你的硬件中完成它。请参阅你的硬件手册)。在这种情况下,请保持套接字打开并在单独的线程中读取它。

相关问题