Socket,同一个IP,对server发起多个连接,怎么判断哪一个连接断开的有关问题
Socket,同一个IP,对server发起多个连接,如何判断哪一个连接断开的问题
server端的主要代码:
server端的主要代码:
private bool m = false, v = false;
private int cmdConn = 0;
private void tcpCMD ()
{
serverCMD = new Socket ( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
IPEndPoint localEP = new IPEndPoint ( ip, portCMD );
serverCMD.Bind ( localEP );
while ( true )
{
serverCMD.Listen ( 65535 );
Socket client = serverCMD.Accept ();
Thread clientThread = new Thread ( new ParameterizedThreadStart ( clientCMD ) );
clientThread.IsBackground = true;
clientThread.Start ( client );
BeginInvoke ( ( ThreadStart ) delegate
{
cmdConn++;
tCMDS.Text = ( cmdConn ).ToString ();// tCMDS是一个问题本框
} );
if ( !m )
{
m = true;
BeginInvoke ( ( ThreadStart ) delegate
{
lCMD.Items.Add ( "m" );
} );
}
else
{
v = true;
BeginInvoke ( ( ThreadStart ) delegate
{
lCMD.Items.Add ( "v" );
} );
}
}
}
private void clientCMD ( object obj )
{
Socket client = ( Socket ) obj;
IPEndPoint remoEP = ( IPEndPoint ) client.RemoteEndPoint;
byte[] buffer;
int re;
string str;
try
{
while ( client.Connected )
{
buffer = new byte[4096];
re = client.Receive ( buffer );
if ( re == 0 )//无数据
{
continue;
}
str = Encoding.UTF8.GetString ( buffer, 0, re );
BeginInvoke ( ( ThreadStart ) delegate
{
tCMDR.Text += str + "\r\n";
} );
client.Send ( Encoding.UTF8.GetBytes ( "get it" ));
}
}
catch
{
if ( v )
{
v = false;
MessageBox.Show ( "v" );
BeginInvoke ( ( ThreadStart ) delegate
{