从 Web 应用程序到本地 TCP 侦听器的 Ajax 请求

发布于 2025-01-11 06:14:25 字数 3465 浏览 0 评论 0原文

提前,对新手问题表示抱歉,但我需要澄清一下。

我正在使用 c# 和 .net core 开发 TCP 侦听器。 该项目的目的是创建一个服务器来侦听 JSON 数据,对其进行处理,然后将其发送到本地打印机。 JSON 数据是从同一本地网络上使用 JavaScript (Ajax) 的 Web 应用程序发送的。

当 Ajax 调用是从一个简单的 html/js 页面进行时,一切都工作正常,但当它嵌入到我的 Web 应用程序(asp net core mvc)中时,一切都工作正常。

收到的数据完全损坏(或加密?)。 我认为问题在于 IIS 使用“本地”ssl 证书,而我的 TCP 监听服务器没有。 因此传输的数据是加密的,服务器无法理解。 我尝试将 ajax 的“跨域”属性设置为 true,但没有结果。

您能否确认 ssl 证书可能是问题的原因?

服务器是使用块包“SimpleTCP”制作的,对于此类项目,您建议我使用什么来代替?

我已经阅读过有关 SslStream 的内容,但在重写服务器之前,我想确定我在做什么...

我必须在服务器上使用的证书是否必须与 IIS 使用的证书相同? (我想如果我想解密数据的话......)

提前感谢您的时间和兴趣!

编辑:

这是来自 Web 应用程序的 Ajax 调用。

let dataToSend = [
    {label : "Soft", price : 2, quantity : 1},
    {label : "Beer", price : 4, quantity : 2},
    {label : "Coffee", price : 2, quantity : 1}
];

$.ajax({
    type: 'POST',
    dataType: 'json',
    url: 'http://192.168.1.53:8910',
    crossDomain: true,
    async: true,
    data: JSON.stringify(dataToSend),
    success: function(response) {
        console.log(response);
    },
    error: function(err) {
        console.log(err);
    }
});

这是 tcp 侦听器上的事件,该事件在接收到数据时触发:

private void Server_DataReceived(object sender, SimpleTCP.Message e)
{
    //this.Console is a textbox
    this.Console.Invoke((MethodInvoker)delegate ()
    {
        int indexDelimiter = e.MessageString.IndexOf(this.JsonResponseDelimiter);

        if(indexDelimiter < 0)
        {
            this.Log("\r\nNo Json data found...");
            return;
        }

        string response = e.MessageString.Substring(indexDelimiter);
        this.Log(response);

        try
        {
            List<TicketLineDTO> ticketLineDTOs = JsonConvert.DeserializeObject<List<TicketLineDTO>>(response);

            e.ReplyLine("Message correctly transfered.");

            if (ticketLineDTOs != null && ticketLineDTOs.Count > 0)
            {
                this.PrintReceivedData(ticketLineDTOs);
            }
        }
        catch (Exception ex)
        {
            this.Log("\r\nWrong data... " + ex.Message);
        }               

    });
}

这是 e.MessageString 的内容:

"\u0016\u0003\u0001\u0002\0\u0001\0\u0001�\u0003\u0003)��\r1�A�NT�*g�~2Z�j\t\u0005� )�N��렜 v�xZ#�E\v;D�!}c\u0003�x#O\u0018\u0016���#x��\t%\0 ��\u0013\u0001\u0013\u0002\u0013\u0003�+�/�,�0̨̩�\u0013�\u0014\0�\0�\0/\05\u0001\0\u0001���\0 \0\0\u00 17\0\0�\u0001\0\u0001\0\0\n\0\n\0\bJJ\0\u001d\0\u0017\0\u0018\0\v\0\u0002\u0001\0 \0#\0\0\0\u0010\0\u0 00e\0\f\u0002h2\bhttp/1.1\0\u0005\0\u0005\u0001\0\0\0\0\0\r\0\u0012\0\u0010\u0004\u0003\b\u0004\ u0004 \u0001\u0005\u0003\b\u0005\u0005\u0001\b\u0006\u0006\u0001\0\u0012\0\0\03\0+\0)JJ\0\u0001\0\0\u001d\ 0 <3v��\u0002KL\0\u0006?a�����.\u000f�\u001b��_(B\u0005\u000f\0-\0\u0002\u 0001\u0001\0+\0\a\u0006::\u0003\u0004\u0003\u0003\0\u001b\0\u0003\u0002\0\u0002Di\0 \u0005\0\u0003\u0002h2��\0\u0001\0\0\u0015\0�\0\0\0\0\0\0\0\0\0\0\0\0\0\ 0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ 0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ 0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ 0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ 0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0"

In advance, sorry for the newbie questions but I need to get some clarity.

I am working on a TCP listener using c# and .net core.
The purpose of this project is to create a server that listens for JSON data, processes it and then sends it to a local printer.
The JSON data is sent from a web application using JavaScript (Ajax) on the same local network.

Everything works fine when the Ajax call is made from a simple html/js page, but not when it is embedded in my web application (asp net core mvc).

The data received is completely corrupted (or encrypted?).
I think the problem is that IIS uses a "local" ssl certificate and my TCP listener server does not have one.
So the transferred data is encrypted and cannot be understood by the server.
I tried to set the "crossdomain" property of my ajax to true, but with no result.

Can you confirm that the ssl certificate could be the cause of the problem?

The server was made using the nugget package "SimpleTCP", what would you advise me to use instead for this type of project?

I have read about SslStream, but before I rewrite the server I would like to be sure what I am doing...

Does the certificate I have to use on my server have to be the same as the one used by IIS? (I guess so if I want to decrypt the data...)

Thanks in advance for your time and interest!

Edit :

Here is the Ajax call, from the web application.

let dataToSend = [
    {label : "Soft", price : 2, quantity : 1},
    {label : "Beer", price : 4, quantity : 2},
    {label : "Coffee", price : 2, quantity : 1}
];

$.ajax({
    type: 'POST',
    dataType: 'json',
    url: 'http://192.168.1.53:8910',
    crossDomain: true,
    async: true,
    data: JSON.stringify(dataToSend),
    success: function(response) {
        console.log(response);
    },
    error: function(err) {
        console.log(err);
    }
});

And here is the event on the tcp listener which is triggered when data is received:

private void Server_DataReceived(object sender, SimpleTCP.Message e)
{
    //this.Console is a textbox
    this.Console.Invoke((MethodInvoker)delegate ()
    {
        int indexDelimiter = e.MessageString.IndexOf(this.JsonResponseDelimiter);

        if(indexDelimiter < 0)
        {
            this.Log("\r\nNo Json data found...");
            return;
        }

        string response = e.MessageString.Substring(indexDelimiter);
        this.Log(response);

        try
        {
            List<TicketLineDTO> ticketLineDTOs = JsonConvert.DeserializeObject<List<TicketLineDTO>>(response);

            e.ReplyLine("Message correctly transfered.");

            if (ticketLineDTOs != null && ticketLineDTOs.Count > 0)
            {
                this.PrintReceivedData(ticketLineDTOs);
            }
        }
        catch (Exception ex)
        {
            this.Log("\r\nWrong data... " + ex.Message);
        }               

    });
}

And here is the content of e.MessageString :

"\u0016\u0003\u0001\u0002\0\u0001\0\u0001�\u0003\u0003)��\r1�A�NT�*g�~2Z�j\t\u0005�)�N���렜 v�xZ#�E\v;D�!}c\u0003�x#O\u0018\u0016���#x��\t%\0 ��\u0013\u0001\u0013\u0002\u0013\u0003�+�/�,�0̨̩�\u0013�\u0014\0�\0�\0/\05\u0001\0\u0001���\0\0\0\u0017\0\0�\u0001\0\u0001\0\0\n\0\n\0\bJJ\0\u001d\0\u0017\0\u0018\0\v\0\u0002\u0001\0\0#\0\0\0\u0010\0\u000e\0\f\u0002h2\bhttp/1.1\0\u0005\0\u0005\u0001\0\0\0\0\0\r\0\u0012\0\u0010\u0004\u0003\b\u0004\u0004\u0001\u0005\u0003\b\u0005\u0005\u0001\b\u0006\u0006\u0001\0\u0012\0\0\03\0+\0)JJ\0\u0001\0\0\u001d\0 <۠xv��\u0002KL\0\u0006?a�����.\u000f�\u001b��_(B\u0005\u000f\0-\0\u0002\u0001\u0001\0+\0\a\u0006::\u0003\u0004\u0003\u0003\0\u001b\0\u0003\u0002\0\u0002Di\0\u0005\0\u0003\u0002h2��\0\u0001\0\0\u0015\0�\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文