簡體   English   中英

如何使用C#語言通過TCP發送十六進制代碼

[英]How can I send hex-code via TCP in C# language

我是C#編程的新手,我正在嘗試編寫將通過十六進制代碼將十六進制代碼發送到服務器的TCP客戶端,從服務器端讀取一些元數據。我設法與服務器連接但無法發送十六進制代碼。請看看我在這里想念的東西。

using System;
using System.IO;
using System.Text;
using System.Net.Sockets;


public class clnt
{

public static void Main()
{

    try
    {
        TcpClient tcpclnt = new TcpClient();
        Console.WriteLine("Connecting...");

        tcpclnt.Connect("192.168.80.128", 557);
        // use the ip address as in the server program

        Console.WriteLine("Connected!");
        Console.WriteLine("Sending Hex Code...");


        string str = Console.ReadLine();
        Stream stm = tcpclnt.GetStream();


        ASCIIEncoding asen = new ASCIIEncoding();
        byte[] ba = asen.GetBytes(str);
        var data = new byte[] { 0xCF, 0xC4 };
        Console.WriteLine("Transmitting");

        stm.Write(ba, 0, ba.Length);

        byte[] bb = new byte[100];
        int k = stm.Read(bb, 0, 100);

        for (int i = 0; i < k; i++)
            Console.Write(Convert.ToChar(bb[i]));

        tcpclnt.Close();
    }

    catch (Exception e)
    {
        Console.WriteLine("Opps " + e.StackTrace);
    }
}

}


//C++ code
int main()
{
    client.Initialize("192.168.80.128", 557);

    std::this_thread::sleep_for(std::chrono::seconds(2));

    std::string xid = U8("NASA_Arnold_AFB_Airshow");

    std::vector<std::uint8_t> command = {0xCF, 0xC4};

    command.push_back(static_cast<std::uint8_t>(xid.length()));

    command.insert(command.end(), xid.begin(), xid.end());

    std::cout << command.size() << std::endl;

    client.Correspond(command, 10);

    std::this_thread::sleep_for(std::chrono::seconds(3));

    command.clear();

    command = {0xC8, 0xC3};

    std::cout << client.Response().size() << std::endl;

    std::vector<std::uint8_t> idhandle(client.Response().begin() + 2, client.Response().end());

    command.insert(command.end(), idhandle.begin(), idhandle.end());

    client.Correspond(command, 3);

    std::this_thread::sleep_for(std::chrono::seconds(3));

    for(auto element : client.Response())
        std::cout << static_cast<int>(element) << std::endl;

    std::uint8_t size = client.Response().back();

    std::cout << "size of xid:" << static_cast<int>(size) << std::endl;

    client.ReadN(size);

    std::this_thread::sleep_for(std::chrono::seconds(3));

    std::cout << std::string(client.Response().begin(), client.Response().end()) << std::endl;

    command.clear();

    command = {0xC8, 0x4A};

    command.insert(command.end(), idhandle.begin(), idhandle.end());

    std::cout << idhandle.size() << std::endl;

    for(auto element : idhandle)
        std::cout << static_cast<int>(element) << std::endl;

    client.Correspond(command, 97);

    std::this_thread::sleep_for(std::chrono::seconds(3));


    std::cout << std::string(client.Response().begin(), client.Response().end()) << std::endl;


    std::getchar();

    return 0;
}

如果我理解正確,則您的特定字節位於array data 但是您不會在代碼中使用它。
似乎您錯過了諸如stm.Write(data, 0, data.Length)來發送字節0xCF和0xC4

您的代碼提示輸入:

string str = Console.ReadLine();

然后從此輸入獲取字節:

byte[] ba = asen.GetBytes(str);

最后將這些字節發送到流:

stm.Write(ba, 0, ba.Length);

您是否在提示符下輸入任何內容? 如果沒有,那么將沒有任何字節要發送。 相反,如果您要發送var data = new byte[] { 0xCF, 0xC4 }; 那么你需要使用

stm.Write(data, 0, data.Length);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM