c#字符串正在打断foreach

时间:2017-05-13 08:44:28

标签: c# string sockets foreach

我有一个使用Socket发送和回收2D游戏数据的Projekt。 游戏客户端必须将他的昵称发送到gamer.name中存储昵称的服务器。所有玩家都存储在列表List<Gamer>中。

因此,当客户端请求用户列表时,服务器会发送由Send(socket, "01$" + gamer.id.ToString() + "$" + gamer.name + "$" + gamer.in_game.ToString())

组成的字符串
  • 01告诉客户端以下数据是用户数据
  • gamer.id是客户的身份
  • gamer.name名称
  • 如果玩家正在玩
  • ,则gamer.in_game为真

但是当客户端收到字符串后,gamer.name之后的所有数据都消失了。所以我试着在MessageBox(在服务器程序中)输出相同的数据,并且gamer.name之后的数据也消失了(所以它不是Socket问题)。

我做得很好,我只需将gamer.name的位置更改为字符串的结尾。 (Send(socket, "01$" + gamer.id.ToString() + "$" + gamer.in_game.ToString() + "$" + gamer.name);

但问题没有解决,因为Send(socket, "01...正在foreach(Gamer gamer in users)中运行而字符串gamer.name就像停止了foreach一样,所以服务器而不是发送所有用户它只发送第一个然后foreach被gamer.name打断。

字符串怎么可能打破foreach并且如何修复它?

存储用户名的代码:

gmr.name = nickname;
this.Invoke((MethodInvoker)(() => list_users.Items.Add(gmr.name)));
SendUsersList(gmr.soc);
users.Add(gmr);

昵称在这里定义:

byte[] buffer = new byte[gmr.soc.ReceiveBufferSize];
gmr.soc.Receive(buffer);
string cmd[] = Encoding.ASCII.GetString(buffer).split('$');
string nickname = cmd[1]; //cmd[0] = 50 (means Register User by nickname)
Register(gmr, nickname);

发送昵称的客户代码:

string text = "50$" + txt_nickname.Text;
byte[] data = new byte[Encoding.ASCII.GetByteCount(text)];
data = Encoding.ASCII.GetBytes(text);
socket_to_server.Send(data);

0 个答案:

没有答案