|
分類:[C#]
Server側とClientを接続して、Clientを切るとServerを再接続待機状態にする様に考えています。
clientをきるとserverのスレッド処理をAbortしたらエラーが出ます。
どうしたらいいか調べてもわからなかったのでご教授していただけると助かります。
namespace WinSockC
{
public partial class FomSoch : Form
{
private Server m_server = null;
public FomSoch()
{
InitializeComponent();
this.m_server = new Server();
this.m_server.ServerStart();
}
private void FomSoch_FormClosing(object sender, FormClosingEventArgs e)
{
this.m_server.StopSock();
}
}
}
namespace WinSockC
{
class Server
{
Encoding ecUni = Encoding.GetEncoding( "utf-16" );
Encoding ecSjis = Encoding.GetEncoding( "shift-jis" );
TcpClient server = null;
TcpListener listener = null;
Thread threadServer = null;
private void StartSock() {
ServerStart();
}
public bool ServerStart() {
try {
if( listener == null ) {
IPAddress ipAdd = IPAddress.Parse( "127.0.0.1" );
listener = new TcpListener( ipAdd, 2001 );
}
listener.Start();
threadServer = new Thread( new ThreadStart( ServerListen ) );
threadServer.IsBackground = true;
threadServer.Start();
return ( true );
}
catch( Exception ex ) {
listener.Stop();
return ( false );
}
}
private void ServerListen() {
server = listener.AcceptTcpClient();
NetworkStream stream = server.GetStream();
Byte[] bytes = new Byte[1000];
while( true ) {
try {
int intCount = stream.Read( bytes, 0, bytes.Length );
if( intCount != 0 ) {
Byte[] getByte = new byte[intCount];
for( int i = 0; i < intCount; i++ )
getByte[i] = bytes[i];
byte[] uniBytes;
uniBytes = Encoding.Convert( ecSjis, ecUni, getByte );
string strGetText = ecUni.GetString( uniBytes );
}
else {
StopSock();
return;
}
}
catch( System.Threading.ThreadAbortException ) {
return;
}
catch( Exception ex ) {
return;
}
}
}
public void StopSock() {
CloseServer();
}
private void CloseServer()
{
if (server != null && server.Connected)
{
server.Close();
}
if (threadServer != null)
{
threadServer.Abort();
}
}
}
}
|