从 c# 接收到 localhost 的数据未显示在 localhost 网页中 - nodemon 应用程序崩溃

Posted

技术标签:

【中文标题】从 c# 接收到 localhost 的数据未显示在 localhost 网页中 - nodemon 应用程序崩溃【英文标题】:data received from c# to localhost is not shown in localhost webpage - nodemon app crashed 【发布时间】:2017-09-09 08:35:50 【问题描述】:

我正在尝试使用控制台应用程序将数据从 c# 实时传递到使用 socket.io 的网页

这是我的 c# 代码:

    static void Main(string[] args)
    
        int i = 0;
        while(true)
        
            //String data = Console.ReadLine();
            String data = i.ToString();
            if(data.Equals("exit", StringComparison.OrdinalIgnoreCase)) break; //If the user types "exit" then quit the program

            SendData("127.0.0.1", 41181, data); //Send data to that host address, on that port, with this 'data' to be sent
            //Note the 41181 port is the same as the one we used in server.bind() in the javascript file.

            System.Threading.Thread.Sleep(50); //Sleep for 50ms
            i++;
        

    

    public static void SendData(string host, int destPort, string data)
    
        IPAddress dest = Dns.GetHostAddresses(host)[0]; //Get the destination IP Address
        IPEndPoint ePoint = new IPEndPoint(dest, destPort);
        byte[] outBuffer = Encoding.ASCII.GetBytes(data); //Convert the data to a byte array
        Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //Create a socket using the same protocols as in the Javascript file (Dgram and Udp)

        mySocket.SendTo(outBuffer, ePoint); //Send the data to the socket

        mySocket.Close(); //Socket use over, time to close it
    

这是 app.js

var app = require('http').createServer(handler);
var io = require('socket.io').listen(app);
var fs = require('fs');

var mySocket = 0;

app.listen(3000); //Which port are we going to listen to?

function handler (req, res) 
  fs.readFile(__dirname + '/index.html', //Load and display outputs to the index.html file
  function (err, data) 
    if (err) 
      res.writeHead(500);
      return res.end('Error loading index.html');
    
    res.writeHead(200);
    res.end(data);
  );


io.on('connection', function (socket) 
  console.log('Webpage connected'); //Confirmation that the socket has connection to the webpage
  mySocket = socket;
);

//UDP server on 41181
var dgram = require("dgram");
var server = dgram.createSocket("udp4");

server.on("message", function (msg, rinfo) 
  console.log("Broadcasting Message: " + msg); //Display the message coming from the terminal to the command line for debugging
  if (mySocket != 0) 
     mySocket.emit('field', "" + msg);
     mySocket.broadcast.emit('field', "" + msg); //Display the message from the terminal to the webpage
  
);

server.on("listening", function () 
  var address = server.address(); //IPAddress of the server
  console.log("UDP server listening to " + address.address + ":" + address.port);
);

server.bind(41181);

最后是 index.html

<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
        <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
    </head>
    <body>
        <script>
            var socket = io();
            socket.on('field', function (data) 

                $("#field").html(data);
            );
        </script>
        Data from C#: <div id="field"></div>
    </body>
</html>

我使用this article 来实现它,一切似乎都可以正常工作,例如当我将数据发送到 node.js 的控制台时它会显示它,但是一旦我在多次打印“网页”后运行页面 (localhost:3000)已连接”它在我的控制台中显示此错误:

nodemon 应用程序崩溃 - 等待文件更改

谁能给我一个解决方案?

this my result picture

【问题讨论】:

即使在服务器和 io 上也开始监听错误。也许这里的某个地方出错了。 你能描述更多吗 【参考方案1】:

错误可能发生在不同的级别。我看到您没有监听服务器和 io 的套接字错误。 两者都是基于EventEmiter的方式,所以都有error事件需要监听。

尝试侦听所有可能的错误位置,这将为您提供有关应用崩溃原因的更多信息。

server.on("error", err => console.error("server error occured", err));
io.on("error", err => console.error("io error occured", err));

更新

用这个替换 socket.io 的 index.html 脚本加载。

<script src="/socket.io/socket.io.js"></script>. 

然后,所有重新连接问题都应该消失了。我不太确定它是如何工作的。

【讨论】:

我把你发送的代码放在了控制台中,但没有显示在控制台中 你看我输出的图片了吗? 是的,当然,没有错误可以帮助调查问题的根源。没有 nodemon 你有同样的行为吗? 让我以更好的方式告诉你.. 当我只是运行控制台 (app.js) 时,它会连续接收数据而没有任何错误并显示在控制台中。我的意思是 c# 和 app.js 都可以正常工作。但是当我运行我的 html 代码以显示字段标记中的数据时,它在打印 app.js 的 io.on 函数中的一些“已连接网页”后返回此错误。我的 html 页面中也没有显示任何内容。 套接字连接有问题。对于单个选项卡,您应该只看到一个“已连接网页”,但浏览器正在向服务器发送垃圾邮件请求,这是不正确的。我可以假设,它可能会导致一些连接限制,最终可能导致应用程序崩溃。

以上是关于从 c# 接收到 localhost 的数据未显示在 localhost 网页中 - nodemon 应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

C# 串口发送不可接收的数据

从串口解析/格式化数据 - C#

Mysql 数据库未显示 localhost phpmyadmin (sequel pro)

通过串行连接从智能卡读卡器接收数据(C#)

c#标签从私有方法(工具箱值)接收信息

如何建立数据库(sql)连接以使用 c# 从文本字段接收数据?