接收SOCKET消息的时候弹出多次消息(不好描述,看代码吧)
/// <summary>
/// 提取命令
/// 格式为两个一位整数拼接成的字符串。
/// 第一位为0表示客户机向服务器发送的命令,为1表示服务器向客户机发送的命令。
/// 第二位表示命令的含义,具体如下:
/// "11"-服务器要求客户机更新在线列表
/// "12"-服务器要求客户机做闪屏振动
/// default-接受用户消息或者系统消息的正文
/// </summary>
/// <param name="s">要解析的包含命令的byte数组,只提取前两个字节</param>
/// <returns>拼接成的命令</returns>
private string DecodingBytes(byte[] s)
{
return string.Concat(s[0].ToString(), s[1].ToString());
}
/// <summary>
/// 接受消息的线程执行体
/// </summary>
private void ReceiveMsg()
{
try
{
while (true)
{
byte[] packet = new byte[_maxPacket];
_nws.Read(packet, 0, packet.Length);
string _cmd = DecodingBytes(packet);
switch (_cmd)
{
/// "11"-服务器要求客户机更新在线列表
/// "12"-服务器要求客户机做闪屏振动
/// default-接受用户消息或者系统消息的正文
case "11":
{
byte[] onlineBuff = new byte[_maxPacket];
int byteCnt = _nws.Read(onlineBuff, 0, onlineBuff.Length);
IFormatter format = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
stream.Write(onlineBuff, 0, byteCnt);
stream.Position = 0;
StringCollection onlineList = (StringCollection)format.Deserialize(stream);
online_cb.Items.Clear();
foreach (string onliner in onlineList)
{
if (!onliner.Equals(_username))
{
online_cb.Items.Add(onliner);
}
}
break;
}
case "12":
{
Nudge();
break;
}
default:
{
string displaytxt = Encoding.Unicode.GetString(packet);
chatrcd_rtb.AppendText(displaytxt);
//消息是空格时好像也会进来。。。怎么处理这里
if (!string.IsNullOrEmpty(displaytxt))
{
//AlertMsg(displaytxt);
Client.Msg.MsgMain mm = new Client.Msg.MsgMain();
Client.Msg.MsgMain.formClassFullPath = "Client.Mission.TelMissions";
Client.Msg.MsgMain.msgContent = displaytxt.Trim();
mm.Show();
_sp1.Play();
}
break;
}
}
}
}
catch (Exception err)
{
Clscommonuse.WriteError("接受消息的线程执行体ChatForm-ReceiveMsg()", "ReceiveMsg", err.Source, err.Message);
}
}
...全文
相关推荐
C# Socket 发送接收文件,消息
C# Socket 发送接收文件,消息 互发消息,服务器下发文件
socket通信以及发送消息接收消息
包含socket简历通信连接, socket发送消息,接收消息。
SOCKET TCP 发送接收消息
SOCKET TCP 发送接收消息, 使用MFC,有简单的接收消息并显示,回复信息等功能,TCP双向通信
Socket编程的发送接收消息函数
关于Socket发生接收消息的VC++源代码
java socket通信自定义消息协议
java socket通信自定义消息协议,socket以字节码的方式通信传递,客户端与服务器端分别进行转换与解析的过程实现简单的消息协议。


