3

私はフォーラムに不慣れで、これを間違ったフォーラムに投稿した可能性があります - 初心者を助けてください。

Android アプリを開発するプロジェクトの一環として、16 進数で設定コマンドを受け入れる小さなマイクロプロセッサ ベースの (変更不可能な) LAN インターフェイスを備えた設定場所にアプリから接続できる必要があります。応答は 16 進数で示されます。

私が変更しようとしたサンプル ソケット プログラムを使用すると (以下のコードを参照)、送信された文字列が 16 進数ではなく ASCII であることを (wireshark を使用して) 確認できるため、0x の 18 ではなく 38 バイトを送信していますプレフィックス。

LONG を使用してみましたが、送信しようとしている値が大きすぎて (コードの途中にある String process = '0x.....' を参照)、「Theliteral 0x.... of type」が表示されます。 int は範囲外です。

誰かが私を正しい方向に向けてくれてありがとう。

ありがとう

// package bdn;
/* The java.net package contains the basics needed for network operations. */
import java.net.*;
/* The java.io package contains the basics needed for IO operations. */
import java.io.*;
/** The SocketClient class is a simple example of a TCP/IP Socket Client.
* For a detailed explanation of the classes in this project see
* bdn.borland.com/article/0,1410,31995,00.html
*/

public class SocketClient 
{
    public static void main(String[] args) 
    {
        /** Define a host server */
        String host = "192.168.1.199";
        /** Define a port */
        int port = 3376;
        int i = 0;

        StringBuffer instr = new StringBuffer();
        // String TimeStamp;
        System.out.println("SocketClient initialized to " + host + ", port " + port );

        try 
        {
            /** Obtain an address object of the server */
            InetAddress address = InetAddress.getByName(host);
            /** Establish a socket connection */
            Socket connection = new Socket(address, port);
            /** Instantiate a BufferedOutputStream object */
            BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream());

            /** Instantiate an OutputStreamWriter object with the optional character
            * encoding.
            */
            OutputStreamWriter osw = new OutputStreamWriter(bos, "US-ASCII");

            // TimeStamp = new java.util.Date().toString();
            String process = "0x308101000c00234C51050000000099670007";

            System.out.println("Data to be sent is " + process) ;

            /** Write across the socket connection and flush the buffer */
            osw.write(process);
            osw.flush();

            System.out.println("Data sent is " + process) ;

            /** Instantiate a BufferedInputStream object for reading
            * incoming socket streams.
            */

            BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());
            /**Instantiate an InputStreamReader with the optional
            * character encoding.
            */

            InputStreamReader isr = new InputStreamReader(bis, "US-ASCII");

            /**Read the socket's InputStream and append to a StringBuffer */
            int c;
            for (i = 0; i <= 18; i++ ) 
            {
                c = isr.read() ;
                instr.append((char) c);
                System.out.println("character " + i + " value " + c);
            }

            /** Close the socket connection. */
            connection.close();
            System.out.println(instr);
        }
        catch (IOException f) 
        {
            System.out.println("IOException: " + f);
        }
        catch (Exception g) 
        {
            System.out.println("Exception: " + g);
        }
    }
}
4

1 に答える 1

1

LONGを使用してみましたが、送信しようとしている値が大きすぎます

それは正しい。値はに対応します

4225287479528688525220725405996728206163975

longの最大値は

9223372036854775807

BigInteger次のように番号をに保存できます。

String process = "0x308101000c00234C51050000000099670007";
BigInteger bi = new BigInteger(process.substring(2), 16);
于 2012-06-07T07:57:43.083 に答える