2 qq 15619205 qq_15619205 于 2014.12.17 15:57 提问

新手来求助,关于C#服务器端与客户端通讯的问题
c#

string strReceive = System.Text.Encoding.Default.GetString(ReceiveBuff, 0, 256);//strReceive是接收到的客户端发的消息内容
 char[] ch1 = strReceive.ToCharArray(0, 1);//取这条消息的第一个字符
 if (ch1[0]!='d')//如果第一个字符为d
{
  (补充说明:客户端发的d开头的消息的格式,就是d**, 指代一个用户名)
  这里的内容:获取strReceive字符串自第2个字符开始至最后,即获取 用户名,把获取的新的字符串赋给string sss;连接数据库,执行SQL命令,就是把 该用户名的状态设置成下线。
}
if(ch1[0]!='d')//如果第一个字符不为'd'
{
    (补充说明:客户端发的不为d开头的消息的格式,就是 **,##    其中
指代用户名,##指代密码)
     这里的内容:分别获取strReceive字符串的 **,##,赋给新的变量,连接数据库,执行SQL命令,对用户进行登录验证,若验证通过则把其状态设置成上线。否则返回登录失败给客户端。
}
感觉这样子,逻辑上没有问题了呀,接下来说说运行结果。
1.客户端发送消息  d陈杰   给服务器

服务器端的界面上有设置了一个按钮,单击后能导出当前数据库的内容,所以当服务器收到客户端的这条消息后,服务器上导出的数据库中陈杰的状态更改为下线了。

2.客户端发送消息  陈杰,cj  给服务器

.验证通过,服务器则给客户端返回成功的消息,并且服务器上导出的数据库里陈杰的状态也更改为上线了。
【这样子的顺序是OK的,但不是我想要的结果,我想要先客户端发送用户名和密码,然后客户端再发该用户要下线的消息,但是问题来了,请看下面】
.{我把上面这样子执行过的关掉,所有都重新开始运行}
.1.客户端发送 消息   张明,zm  给服务器   
.
.通过验证了,服务器端导出的数据库,张明的状态也显示为上线了。但是发现:
我在服务器界面上放的一个textbox, 里面代码 if(ch1[0]=='d')  { string sss = strReceive.Substring(1, revLength - 1);textBox1.Text = sss;UserDown(sss);}   它是在这段里用的,不是当ch1[0]=='d'时,它才会有内容吗?明明发的不是d开头的,它为什么还显示内容,而且显示的吧,张明和zm中间没了逗号,也不是客户端发的内容。
下面客户端将要发送 用户下线的消息了。
2.客户端发送消息  d张明  给服务器
.点击服务器上的导出按钮,显然导出的数据库上张明的状态并没更新为下线。
.
.【整个运行过程都没有报一点错,但是为什么2次客户端发送的消息顺序不一样,就导致它判断客户端发送的消息是否是d开头判断错误了呢。】
.帮忙看看它究竟是哪里产生了问题呢。

这是关于什么阻塞么,但是同样的内容只有执行的顺序不一样呀。本人第一次接触这上面,不懂究竟是哪里的问题,怎么解决了,求大神指点一下撒。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!