//读取消息回调函数
private void ReadCallBack(IAsyncResult iar)
{
DataReadWrite datareadwrite = (DataReadWrite)iar.AsyncState;
try
{
int recv = datareadwrite.ns.EndRead(iar);
string aa = Encoding.Unicode.GetString(datareadwrite.read, 0, recv);
//string bb = "";
stringaa.Text = aa;
if (isExit == false)
{
if (aa.Substring(0, 1) != "#") //群发为#,没有则为单发
{
aa = aa.Insert(0, datareadwrite.client.Client.RemoteEndPoint.ToString() + "对大家说:");
//stringbb.Text = aa.Substring(1, aa.Length-1);
foreach (DataReadWrite drw in clientlist)
SendString(drw, aa);
}
else //私聊时截取ip地址,收到的信息为“#192.168.76.102:3315#消息”
{
int c=aa.LastIndexOf("#"); //截取ip地址的位置index
string ipaddress = aa.Substring(1, c - 1); //截取ip地址
for (int i = 0; i <= listBox1.Items.Count - 1; i++)
{
if (ipaddress == listBox1.Items[i].ToString())
{
//找到需要发送的对象
DataReadWrite obj = (DataReadWrite)clientlist[i];
//增加发送源的IP地址和端口号
aa = aa.Insert(c + 1, datareadwrite.client.Client.RemoteEndPoint.ToString() + "跟你说:");
SendString(obj, aa.Substring(c+1));
break;
//MessageBox.Show(aa.Substring(c, aa.Length - 2));
}
}
}
datareadwrite.ns.BeginRead(datareadwrite.read, 0, datareadwrite.read.Length, ReadCallBack, datareadwrite);
}
}
catch (Exception e)
{
lst_ServerList.Invoke(setlistboxcallback, e.Message);
listBox1.Invoke(removelistboxcallback, datareadwrite);
comboBox1.Invoke(removecomboboxcallback, datareadwrite);
//SendList();
}
finally
{ }
}
//发送消息
private void SendString(DataReadWrite datareadwrite, string str)
{
try
{
datareadwrite.write = Encoding.Unicode.GetBytes(str + "\r\n");
datareadwrite.ns.BeginWrite(datareadwrite.write, 0, datareadwrite.write.Length, new AsyncCallback(SendCallBack), datareadwrite);
datareadwrite.ns.Flush();
lst_ServerList.Invoke(setlistboxcallback, string.Format("向{0}发送:{1}", datareadwrite.client.Client.RemoteEndPoint, str));
}
catch (Exception e)
{
lst_ServerList.Items.Add(e.Message);
//发送失败时,清除发送不成功的IP地址
listBox1.Invoke(removelistboxcallback, datareadwrite);
comboBox1.Invoke(removecomboboxcallback, datareadwrite);
//SendList();
}
finally
{
}
}
//发送回调
private void SendCallBack(IAsyncResult iar)
{
DataReadWrite datareadwrite = (DataReadWrite)iar.AsyncState;
try
{
datareadwrite.ns.EndRead(iar);
}
catch (Exception e)
{
lst_ServerList.Invoke(setlistboxcallback, e.Message);
listBox1.Invoke(removelistboxcallback, datareadwrite);
comboBox1.Invoke(removecomboboxcallback, datareadwrite);
}
finally
{ }
}
//停止服务按钮
private void btn_End_Click(object sender, EventArgs e)
{
isExit = true;
allDone.Set();
btn_Start.Enabled = true;
btn_End.Enabled = false;
lst_ServerList.Items.Add("服务器于" + DateTime.Now.ToString() + "停止运行.");
}