gpt4 book ai didi

c# - Udpclient 变量不断重置为 Null ASP.NET

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:32 25 4
gpt4 key购买 nike

我正在开发一个使用 asp 网站作为 UDP 监听器的小项目。问题是我使用了计时器,因此,它每次都会加载页面,导致 udpclient 一次又一次地重新连接到同一端口,从而引发异常。

我在 protected void Page_Load(object sender, EventArgs e) 下使用了if (!IsPostBack) 来使用它一次,但由于它是一个全局变量,它使得无论如何它都是空的。

我听说过 ViewState,但我不知道如何将它用于 udpclient 值。

下面是我的代码:

private const int listenPort = 6011;

IPEndPoint groupEP;
UdpClient listener;

protected void Page_Load(object sender, EventArgs e)
{

if (!IsPostBack)
{
listener = new UdpClient(listenPort);

groupEP = new IPEndPoint(IPAddress.Any, listenPort);

}

}


protected void Timer1_Tick(object sender, EventArgs e)
{
Recive();
}

public void Recive()
{



byte[] bytes = listener.Receive(ref groupEP);


var width = 100; // for example
var height = 100; // for example
var dpiX = 96d;
var dpiY = 96d;
var pixelFormat = PixelFormats.Pbgra32; // for example
var bytesPerPixel = (pixelFormat.BitsPerPixel + 7) / 8;
var stride = bytesPerPixel * width;

var bitmap = BitmapSource.Create(width, height, dpiX, dpiY,
pixelFormat, null, bytes, stride);



System.Drawing.Bitmap bitmap1;
using (MemoryStream outStream = new MemoryStream())
{
BitmapEncoder enc = new BmpBitmapEncoder();

enc.Frames.Add(BitmapFrame.Create(bitmap));
enc.Save(outStream);
bitmap1 = new System.Drawing.Bitmap(outStream);

bitmap1.Save(HttpContext.Current.Server.MapPath("/image/bitmap.png"));
Image1.ImageUrl = ("/image/bitmap.png");
}


}

最佳答案

PostBacks 上的值为 null 是完全合理的。这是 ASP.NET 中的一个基本概念 - 如果您不在页面中保留某些内容,则下次加载页面时,它将为空。诸如 TextBoxes 或其他控件之类的东西保持其值的原因是因为 ASP.NET 在幕后做了一些魔术并将控件的值序列化为 ViewState,它在响应客户端时与 HTML 一起发送。然后,当发生 PostBack 时,值会在 HTTP 请求中从客户端发回,并且值会作为 ASP.NET 页面生命周期的一部分从 ViewState 重新加载到您的控件。

持久化有多种方法。评论中的一个人提到将您的变量存储为 static,您不应该这样做(除非您希望加载它的每个人访问的每个页面都可以同时访问相同的变量时间,从而引入并发问题来处理)。

在您的情况下,我建议使用 Page.Session,它仅在服务器端保留变量(例如,没有客户端序列化)。此变量持久化基于每个 session ,因此两个不同的用户将无法访问同一个变量,这与使用 static 的建议相反。像这样:

if (!IsPostBack)
{
listener = new UdpClient(listenPort);
Session["listener"] = listener;
}
else
{
listener = (UdpClient)Session["listener"];
}

关于c# - Udpclient 变量不断重置为 Null ASP.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33423821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com