做个局域网游戏,服务器用TCPlistener,客户端用Socket,当服务器连续向客户端发送数据时,客户端响应不过来,怎么解决?
服务器端根据游戏结果,可能向客户端连续发两条数据(甚至更多条),这是客户端需要作出相应,改变界面,例如更新某个label的text,可是有时服务器发送第一条数据后客户端能正确响应,服务器紧接发第二条时(这是客户端还在做相应第一条的动作,例如播放声音,或者利用循环改变某个picturebox的图像等),
客户端就没有反应了,怎么解决?
服务器端简化代码:
private Void SendMessage(string Msg;
{
byte[] msgByte = new byte[65535];
string msgStr = msg + "\r\n";
msgByte = System.Text.Encoding.BigEndianUnicode.GetBytes(msgStr.ToCharArray());
if (socket.Connected)
socket.Send(msgByte);
}
public button1_click()
{
if(X1<10&&X2>100)
{
SendMessage("login|"+X1.ToString()+"|");
SendMessage("welcome|"+X2.ToString()+"|");
}
else
{
SendMessage("logout|"+(X2-X1).ToString()+"|");
}
}
客户端:
private void button1_Click()
{
ClientSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
ClientSocket.Connect(ServerInfo);
ClientSocket.BeginReceive(MsgBuffer,0,MsgBuffer.Length,0,new AsyncCallback(this.ReceiveCallBack),null);
}
private void ReceiveCallBack(IAsyncResult AR)
{
int REnd=ClientSocket.EndReceive(AR);
if(REnd==0)
return;
string Rec=Encoding.BigEndianUnicode.GetString(MsgBuffer,0,REnd);
string [] cmdparams=Rec.Split('|');
switch(cmdparams[0])
{
case "login":
showmessage('loginok');
playmusic("hello");
break;
case "welcome"
showmessage('welcomed);
playmusic("welcome");
break;
case "logout":
showmessage("logoutok");
playmusic("byebye");
break;
}
ClientSocket.BeginReceive(MsgBuffer,0,MsgBuffer.Length,0,new AsyncCallback(ReceiveCallBack),null);
}
当服务器端发送SendMessage("logout|"+(X2-X1).ToString()+"|");客户端能够响应,
可是服务器连续发送
SendMessage("login|"+X1.ToString()+"|");
SendMessage("welcome|"+X2.ToString()+"|");
时客户端就处理不了第二条指令了,怎么解决这个问题??