public void StartSocketAccept()
{
while (true)
{
mre.Reset();
_svrSocket.BeginAccept(new AsyncCallback(AcceptConn), _svrSocket); ←这是那行代码
mre.WaitOne();
}
}
下面是错误事件的描述
An unhandled exception occurred and the process was terminated.
Application ID: /LM/W3SVC/2/ROOT
Process ID: 6380
Exception: System.NullReferenceException
Message: Object reference not set to an instance of an object.
StackTrace: at TcpSvr.StartSocketAccept() in d:\TcpSvr.cs:line 91
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
11 个解决方案
#1
while (true)
{
mre.Reset();
mre.WaitOne();
}
不是这么玩的,你while true了当然会挂
你只要这样写
public void StartSocketAccept()
{
_svrSocket.BeginAccept(new AsyncCallback(AcceptConn), _svrSocket); ←这是那行代码
}
然后在你的AcceptConn方法里加上上面的这个方法
AcceptConn (xxx xxxx)
{
//这里是你的业务代码
//末尾加重引引用StartSocketAccept() 方法
StartSocketAccept();
}
{
mre.Reset();
mre.WaitOne();
}
不是这么玩的,你while true了当然会挂
你只要这样写
public void StartSocketAccept()
{
_svrSocket.BeginAccept(new AsyncCallback(AcceptConn), _svrSocket); ←这是那行代码
}
然后在你的AcceptConn方法里加上上面的这个方法
AcceptConn (xxx xxxx)
{
//这里是你的业务代码
//末尾加重引引用StartSocketAccept() 方法
StartSocketAccept();
}
#2
好的 我试一下
#3
Object reference not set to an instance of an object.
我X。你在Asp.net上写这个?_svrSocket 。。这对象被回收了。_svrSocket变成了null值了。
我X。你在Asp.net上写这个?_svrSocket 。。这对象被回收了。_svrSocket变成了null值了。
#4
整套程序基本完成了,但是就是因为这句话会造成w3wp.exe意外终止,这样就不会正常持续监听端口,要刷新一次页面才可以。
#5
废话嘛,整个页面的生命周期都结束了,被回收掉了
你要开socket侦听,要写服务程序,而不是在网站里写这玩意
你要开socket侦听,要写服务程序,而不是在网站里写这玩意
#6
你还是放弃这样写吧。我最近也想试着这么搞,发现不行,只能用服务或WinFom来做这个,网页的保存不了,会被回收。
#7
不用运行页面,只在iis假设之后就可以监听端口,读取的数据存入session,然后存入数据库,不打开页面它还是会自动持续监听,就是运行一段时间后,w3wp.exe意外关闭,就监听不到数据了,在客户端打开一次页面就会继续监听接收数据
#8
#9
每次并发请求都会用一个线程处理,如果都访问到你这个方法,你自己想想,IIS并发是有上限的,处理不完排队的请求就会无响应或者一直等待,你觉得这么做网站爽是么
#10
Object reference not set to an instance of an object.
我X。你在Asp.net上写这个?_svrSocket 。。这对象被回收了。_svrSocket变成了null值了。
整套程序基本完成了,但是就是因为这句话会造成w3wp.exe意外终止,这样就不会正常持续监听端口,要刷新一次页面才可以。
你还是放弃这样写吧。我最近也想试着这么搞,发现不行,只能用服务或WinFom来做这个,网页的保存不了,会被回收。
这种情况我临时找到一个办法,globax 里面声明SOCKET对象
如果这里作为一个客户端,只要在服务端做一个刷新线程即可(IIS线程池回收有时间间隔的)只要在在时间范围内刷新一下任何网页 IIS就不会回收了(或者概率小)
如果作为服务器,服务器加个服务刷新页面也可以起到持久化的作用
#11
是设置问题,并不是这行代码导致出错,而是iis停止后这行代码无法运行,我自己找了下原来,优化了一下设置现在解决了,还是谢谢各位的帮助
#1
while (true)
{
mre.Reset();
mre.WaitOne();
}
不是这么玩的,你while true了当然会挂
你只要这样写
public void StartSocketAccept()
{
_svrSocket.BeginAccept(new AsyncCallback(AcceptConn), _svrSocket); ←这是那行代码
}
然后在你的AcceptConn方法里加上上面的这个方法
AcceptConn (xxx xxxx)
{
//这里是你的业务代码
//末尾加重引引用StartSocketAccept() 方法
StartSocketAccept();
}
{
mre.Reset();
mre.WaitOne();
}
不是这么玩的,你while true了当然会挂
你只要这样写
public void StartSocketAccept()
{
_svrSocket.BeginAccept(new AsyncCallback(AcceptConn), _svrSocket); ←这是那行代码
}
然后在你的AcceptConn方法里加上上面的这个方法
AcceptConn (xxx xxxx)
{
//这里是你的业务代码
//末尾加重引引用StartSocketAccept() 方法
StartSocketAccept();
}
#2
while (true)
{
mre.Reset();
mre.WaitOne();
}
不是这么玩的,你while true了当然会挂
你只要这样写
public void StartSocketAccept()
{
_svrSocket.BeginAccept(new AsyncCallback(AcceptConn), _svrSocket); ←这是那行代码
}
然后在你的AcceptConn方法里加上上面的这个方法
AcceptConn (xxx xxxx)
{
//这里是你的业务代码
//末尾加重引引用StartSocketAccept() 方法
StartSocketAccept();
}
好的 我试一下
#3
Object reference not set to an instance of an object.
我X。你在Asp.net上写这个?_svrSocket 。。这对象被回收了。_svrSocket变成了null值了。
我X。你在Asp.net上写这个?_svrSocket 。。这对象被回收了。_svrSocket变成了null值了。
#4
Object reference not set to an instance of an object.
我X。你在Asp.net上写这个?_svrSocket 。。这对象被回收了。_svrSocket变成了null值了。
整套程序基本完成了,但是就是因为这句话会造成w3wp.exe意外终止,这样就不会正常持续监听端口,要刷新一次页面才可以。
#5
废话嘛,整个页面的生命周期都结束了,被回收掉了
你要开socket侦听,要写服务程序,而不是在网站里写这玩意
你要开socket侦听,要写服务程序,而不是在网站里写这玩意
#6
Object reference not set to an instance of an object.
我X。你在Asp.net上写这个?_svrSocket 。。这对象被回收了。_svrSocket变成了null值了。
整套程序基本完成了,但是就是因为这句话会造成w3wp.exe意外终止,这样就不会正常持续监听端口,要刷新一次页面才可以。
你还是放弃这样写吧。我最近也想试着这么搞,发现不行,只能用服务或WinFom来做这个,网页的保存不了,会被回收。
#7
不用运行页面,只在iis假设之后就可以监听端口,读取的数据存入session,然后存入数据库,不打开页面它还是会自动持续监听,就是运行一段时间后,w3wp.exe意外关闭,就监听不到数据了,在客户端打开一次页面就会继续监听接收数据
#8
#9
每次并发请求都会用一个线程处理,如果都访问到你这个方法,你自己想想,IIS并发是有上限的,处理不完排队的请求就会无响应或者一直等待,你觉得这么做网站爽是么
#10
Object reference not set to an instance of an object.
我X。你在Asp.net上写这个?_svrSocket 。。这对象被回收了。_svrSocket变成了null值了。
整套程序基本完成了,但是就是因为这句话会造成w3wp.exe意外终止,这样就不会正常持续监听端口,要刷新一次页面才可以。
你还是放弃这样写吧。我最近也想试着这么搞,发现不行,只能用服务或WinFom来做这个,网页的保存不了,会被回收。
这种情况我临时找到一个办法,globax 里面声明SOCKET对象
如果这里作为一个客户端,只要在服务端做一个刷新线程即可(IIS线程池回收有时间间隔的)只要在在时间范围内刷新一下任何网页 IIS就不会回收了(或者概率小)
如果作为服务器,服务器加个服务刷新页面也可以起到持久化的作用
#11
是设置问题,并不是这行代码导致出错,而是iis停止后这行代码无法运行,我自己找了下原来,优化了一下设置现在解决了,还是谢谢各位的帮助