从 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 应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章