1

Linux から Windows にデータを取得するには、C++ で次の Java 機能を複製する必要があります。Winsock2 が最善の方法ですか?.

また、提案する参照コードはありますか?

ティア、B

java.nio.ByteBuffer をインポートします。

パブリック クラス MessageXdr {

    プライベート ByteBuffer バッファ;
    プライベート int サイズ。

    // taille max corps de message
    private static final int T_MAX_CORPS_MSG = 16384;

    public MessageXdr() {
        バッファ = ByteBuffer.allocate(4 * T_MAX_CORPS_MSG);
        サイズ = 0;
    }

    public MessageXdr(byte[] 配列)
    {
        ByteBuffer tmpBuffer = ByteBuffer.wrap(配列);
        バッファ = tmpBuffer.asReadOnlyBuffer();
        サイズ = 配列.長さ;
    }

    public int getSize()
    {
        サイズを返します。
    }

    public int getPosition()
    {
        戻り値 buffer.position();
    }

    パブリックバイト[] getArray()
    {
        buffer.array(); を返します。
    }

    public void resetBuffer()
    {
        サイズ = 0;
        buffer.rewind();
    }

    public int readInt()
    {
        int retour = buffer.getInt();
        リターンリターン;
    }

    public long readUnsignedInt()
    {
        ByteBuffer tmp = ByteBuffer.allocate(8);
        tmp.putInt(0);
        tmp.putInt(buffer.getInt());

        tmp.getLong(0) を返します。
    }

    public float readFloat()
    {
        float retour = buffer.getFloat();
        リターンリターン;
    }

    public void writeInt(int v)
    {
        buffer.putInt(v);
        サイズ+=4;
    }

    public void writeFloat(float v)
    {
        buffer.putFloat(v);
        サイズ+=4;
    }
}
4

3 に答える 3

1

私はまだそれを使っていませんが、より複雑なデータ構造をマーシャリングすることになると、シリアル化の部分を後押しすることを検討します。

実際のデータ送信では、winsock2はWindowsの基本的なソケットAPIであり、他のすべてのAPIはその上に構築されています(Windows 7についてはわかりません)。 tは2回理解する必要があります。しかし、私の経験から、ソケットは複雑な獣なので、とにかく多くを理解する必要があります...

そして、これまでで最悪の実装であるMFCからのCSocketを避けてください。(一部の不正行為を修正したと言う人もいますが、それだけの価値はありません。)

于 2009-06-10T17:21:40.047 に答える
1

MFC クラス (CSocket) の使用が許可されている場合は、Java のコードに近い可能性があります。

http://msdn.microsoft.com/en-us/library/wxzt95kb(VS.80).aspx

それ以外の場合は、Winsock2 で問題ありません (MFC クラスは実装でそれを使用するだけです)。

于 2009-06-09T18:41:11.853 に答える
0

厳密なバイト配列は、Linux から Windows または他のシステムへの変換を必要としません。ただし、整数と浮動小数点数を扱っている場合は...

個人的には Poco::BinaryWriter と Poco::BinaryReader http://pocoproject.org/docs/Poco.BinaryWriter.htmlを使用します

using namespace Poco;
using namespace std;
std::ofstream myFile("path", ios::in | ios::binary);
BinaryWriter writer(myFile, BIG_ENDIAN_BYTE_ORDER);
writer << 10.0f; 
writer << 10000; 
//etc etc
myFile.close();

今すぐ読む

std::ifstream myFile("path", ios::in | ios::binary);
BinaryReader reader(myFile, BIG_ENDIAN_BYTE_ORDER);
int intVariable;
float floatVariable;
reader >> floatVariable;
reader >> intVariable;
//etc etc
myFile.close();
于 2009-06-09T18:40:26.817 に答える