多客户端与一个服务器端的多线程问题
大概有100个客户端,一个服务器,采用TCP连接,下面这样写一个高手说不对,说下面写的不叫多线程,实现不了100个客户端与服务器通信的。请教,该怎么改进?
以下代码是服务器端程序。客户端只发送数据。
我测试了2个客户端与这个服务器端通信,服务器端界面上能收到不同客户端发送过来的数据啊,但是没有环境测试多个客户端与服务器端通信。
private void ServerForm_Load(object sender, EventArgs e)
{
//测试线程
Thread SoceketTestThread = new Thread(new ThreadStart(StartListening));
SoceketTestThread.Start();
//实例化
Set_Text = new set_Text(set_ListViewCarFlowText);
}
/// <summary>
/// 开启端口监听线程
/// </summary>
private void StartListening()
{
listener = new TcpListener(IPAddress.Parse(m_serverIP), int.Parse(m_serverPort));
listener.Start();
while (StartListeningFlg)
{
try
{
//一旦在该端口号监听到信息,则启动一个新的线程
Socket s = listener.AcceptSocket();
//判断是否处在连接状态中
if (s.Connected == true)
{
clientsocket = s;
clientservice = new Thread(new ThreadStart(ServiceClient));
clientservice.Start();
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
return;
}
}
//停止监听
listener.Stop();
}
/// <summary>
/// 开启对客户端信息的接收处理线程
/// </summary>
private void ServiceClient()
{
try
{
while (ServiceClientFlg)
{
Byte[] buffer = new Byte[1024];
//设置该socket为阻止模式
clientsocket.Blocking = true;
//获取客户端IP地址
IPEndPoint ipe = (IPEndPoint)clientsocket.RemoteEndPoint;
//接收二进制byte数据
int intRec = clientsocket.Receive(buffer);
if (intRec < 1)
{
clientsocket.Close();
//委托相关,用以该线程操控主线程上的控件
listViewCarFlow.Invoke(Set_Text, new object[] { "\r\n" + "已经断开连接" });
break;
}
//将二进制数据信息转换成字符串型
string strReceiveMessage = System.Text.Encoding.ASCII.GetString(buffer);
//委托相关,用以该线程操控主线程上的控件
listViewCarFlow.Invoke(Set_Text, new object[] { "\r\n" + strReceiveMessage });
//发送到客户端
byte[] bs = Encoding.ASCII.GetBytes("i have recevied from" + strIP);
clientsocket.Send(bs, bs.Length, 0);
}
}
catch (Exception ex)
{
clientsocket.Close();
}
}