崩溃
有时十多天没事,有时一天几次崩溃。自己查不出错,CATCH不到错。把代码发出来,请求帮助 private void button1_Click(object sender, EventArgs e)
{
StartListeningA();
}
//开始同步监听
public void StartListeningA()
{
try
{
Thread thread = new Thread (new ThreadStart(accp));
//thread.IsBackground = true;
thread.Start();
}
catch(Exception ee) {MessageBox.Show(ee.Message);}
}
//线程同步方法 accp的代码。
private void accp()
{
MyServer = new IPEndPoint(myIP, 2003);
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Bind(MyServer);
sock.Listen(50);
while (true)
{
try
{
accSock = sock.Accept();
if (accSock.Connected)
{
Thread thread = new Thread(new ThreadStart(round));
thread.Start();
thread.IsBackground = true;
}
}
catch
{
return;
}
}
} private void round()
{
while (true)
{
NetworkStream netStream = new NetworkStream(accSock);
netStream.Read(RecByte, 0, RecByte.Length);
DO(netStream);
}
} //关闭系统
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
有时十多天没事,有时一天几次崩溃。自己查不出错,CATCH不到错。把代码发出来,请求帮助 private void button1_Click(object sender, EventArgs e)
{
StartListeningA();
}
//开始同步监听
public void StartListeningA()
{
try
{
Thread thread = new Thread (new ThreadStart(accp));
//thread.IsBackground = true;
thread.Start();
}
catch(Exception ee) {MessageBox.Show(ee.Message);}
}
//线程同步方法 accp的代码。
private void accp()
{
MyServer = new IPEndPoint(myIP, 2003);
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Bind(MyServer);
sock.Listen(50);
while (true)
{
try
{
accSock = sock.Accept();
if (accSock.Connected)
{
Thread thread = new Thread(new ThreadStart(round));
thread.Start();
thread.IsBackground = true;
}
}
catch
{
return;
}
}
} private void round()
{
while (true)
{
NetworkStream netStream = new NetworkStream(accSock);
netStream.Read(RecByte, 0, RecByte.Length);
DO(netStream);
}
} //关闭系统
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
2 楼主这几个方法设计得不合理
3 问题应该是没做同步改进:1 round方法重新定为:
private void round(Socket socket)
{
while (true)
{
NetworkStream netStream = new NetworkStream(socket);
netStream.Read(RecByte, 0, RecByte.Length);
DO(netStream);
}
}2 把accSock声明为局部变量,避免同步问题,同时改变调用方式:
Socket accSock = sock.Accept();
if (accSock.Connected)
{
Thread thread = new Thread(new ParameterizedThreadStart(round));
thread.IsBackground = true;
thread.Start(accSock);
}
这样一改,基本上应该可以解决程序崩溃的问题,不过,性能太差应该改用队列方式处理
private void round(Object obj)
{
Socket socket = (Socket)obj;
while (true)
{
NetworkStream netStream = new NetworkStream(socket);
netStream.Read(RecByte, 0, RecByte.Length);
DO(netStream);
}
}