【问题标题】:How can I send hex-code via TCP in C# language如何以 C# 语言通过 TCP 发送十六进制代码
【发布时间】:2017-04-27 08:36:25
【问题描述】:

我是 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;
}

【问题讨论】:

  • 您要发送什么?你的意思是你想发送0xAB 并接收文字"0xAB" 还是什么?因为..如果您考虑一下(0 == 0x00 == null' ' == 32 == 0x20),那么一切都是“十六进制”
  • 当您说“无法发送十六进制代码”时,您能澄清一下您的意思吗?您是否收到错误消息,如果有,它们是什么?
  • 我注意到代码提示输入string str = Console.ReadLine();,然后获取字节byte[] ba = asen.GetBytes(str);,最后将这些字节发送到流:stm.Write(ba, 0, ba.Length);。您是否在提示符处输入任何内容?如果没有,则不会有任何字节要发送。
  • 嗨,实际上我正在尝试将 C++ 代码移植到 C#。让我为问题编写示例 C++ 代码也许这会有所帮助。

标签: c# c++ sockets tcp tcpclient


【解决方案1】:

如果我理解正确,您的特定字节在数组data 中。但是您不会在代码中使用它。
您似乎错过了类似 stm.Write(data, 0, data.Length) 发送字节 0xCF 和 0xC4 的内容

【讨论】:

    【解决方案2】:

    您的代码提示输入:

    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);

    【讨论】:

    • 是的。我正在写一些东西,但我想自动执行。是的,我的意思是发送 var data = new byte[] { 0xCF, 0xC4 };然后读取一些字节并发送一些不同的字节,我用 C++ 写了这个,我用代码更新了问题。提前致谢
    猜你喜欢
    • 1970-01-01
    • 2016-04-06
    • 2014-05-15
    • 1970-01-01
    • 2017-03-26
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多