上一章可以接收数据显示了,使用中发现,第2次连接时,出现毫无反应的现象,
故障排查,想着是不是要断开连接,没有关闭的缘故,
后来觉的不发送数据了并不是说就要断开连接,
并且数据发送段没有任何信息告诉我啥时候是连着没数据(暂停),啥时候是不连接了(关闭),
所以,想通过以接收的数据是不是0判断就不行了,
最后的思路是:运行后我开启一个后台线程时刻监听是否有连接请求,收到请求就创建一个线程,去接收处理数据,
再收到一个请求就把上一个线程杀死,执行下一个线程。(如果不是在一个死循环里,线程长久不使用了,会被清理的,不过我需要写在死循环里,所以要手动杀死)
整理的代码如下:
/// <summary>
/// 初始化连接
/// </summary>
public void initBack()
{
//定义侦听端口,侦听任何IP
ipEnd = new IPEndPoint(IPAddress.Any, 5300);
//定义套接字类型,在主线程中定义
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//连接
serverSocket.Bind(ipEnd);
//开始侦听,最大10个连接
serverSocket.Listen(10);
//开启一个线程连接,必须的,否则主线程卡死
Thread thread = new Thread(Listen);
thread.Start(serverSocket);
}
/// <summary>
/// 监听连接
/// </summary>
Thread lastThread = null;
void Listen( )
{
while (true)
{
clientSocket = serverSocket.Accept();
countSocket++;
if (clientSocket != null)
{
Thread th = new Thread(A);
th.IsBackground = true;
if (lastThread != null)
{
lastThread.Abort();
}
th.Start();
lastThread = th;
}
}
}
void A()
{
while (true)
{
ReceiveBack();
}
}
这样就可以了