有关.NET TCP

dlutwuwei 2011-07-28 08:36:04
System.Net.Sockets.SocketException: 提供了一个无效的参数。
在 System.Net.Sockets.Socket.Accept()
在 System.Net.Sockets.TcpListener.AcceptTcpClient()
在 FLServer.Server.RunServer(Object obj) 位置 D:\Visual Studio 2005
...全文
57 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
沐NeMo 2011-07-29
  • 打赏
  • 举报
回复
很多高手对于这样简单的问题,是不会理你的。
PS:
我是菜鸟。
高手经常潜水的。
沐NeMo 2011-07-29
  • 打赏
  • 举报
回复
为什么要平凡启动呢。你自己思路是怎么的呢。
服务只启动一次就够了。监听,互发数据,实现通信。
多线程也可以处理到的。多线程互斥,信号同步,数据同步,等要多注意而已。
要在实际应用中多实践。
dlutwuwei 2011-07-29
  • 打赏
  • 举报
回复
我自己解答吧,这个论坛确实没有高手:
                    stop = true;
while (stop)
{
TcpClient client = listener.AcceptTcpClient();
//start a new thread to process a request
Thread thread = new Thread(new ParameterizedThreadStart(ProcessClient));
thread.Start(client);
}
}


if (listener != null)
{
listener.Stop();
listener = null;
}

这个错误是不停地重启server引发的,主要原因是listener没有进行互斥处理,在.NET和java中,多线程使用一个方法是不需要互斥的,内存中每个线程都有副本,而全局变量在多线程中使用的都是同一个变量,当一个线程中listener正在stop的时候,另一个线程中的listener正在启动,会引发很多莫名奇妙的错误,.NET并没有对多线程使用变量的warning。这种错误如果不是在频繁启动的时候,是不会发生的,网上几乎没有人提到这一点。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧