7,655
社区成员
发帖
与我相关
我的任务
分享
//负责服务器的TCP连接监听
public class NetListener
{
//服务器的TCP监听
private TcpListener tcpListener = null;
//监听线程
private Thread listenThread = null;
//监听端口号
private int listenPort = 0;
//是否正在监听连接
private bool isListenning = false;
public bool IsListenning
{
get
{
return isListenning;
}
}
//错误字符串
private string errmessage = "";
public string ErrMessage
{
get
{
return errmessage;
}
}
//NetServer引用对象
public NetServer ServerObj;
//构造函数
public NetListener(string ip, int port)
{
listenPort = port;
tcpListener = new TcpListener(IPAddress.Parse(ip), listenPort);
}
//开始监听
public bool StartListen()
{
//如果已经监听,则直接返回
if (this.isListenning)
return true;
//启动一个新的线程,执行方法ConnectListen(),以便来响应从服务器发回的信息
isListenning = true;
listenThread = new Thread(new ThreadStart(ConnectListen));
//listenThread.IsBackground = true;
listenThread.Start();
return true;
}
//监听连接的线程函数
private void ConnectListen()
{
//开始监听
try
{
tcpListener.Start();
}
catch (Exception ex)
{
//System.Windows.Forms.MessageBox.Show(ex.Message);
}
//循环接受连接请求
while (isListenning)
{
try
{
//当接收到一个客户端请求时,确认与客户端的连接
Socket socket = tcpListener.AcceptSocket();
//把socket交与ServerObj对象进行处理
ServerObj.AcceptSocket(socket);
}
catch (Exception ex)
{
errmessage = ex.Message;
}
}
}
//停止监听
public bool StopListen()
{
isListenning = false;
if (listenThread != null)
listenThread.Abort();
tcpListener.Server.Close();
tcpListener.Stop();
return true;
}
}
}