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开头判断错误了呢。】
.帮忙看看它究竟是哪里产生了问题呢。
这是关于什么阻塞么,但是同样的内容只有执行的顺序不一样呀。本人第一次接触这上面,不懂究竟是哪里的问题,怎么解决了,求大神指点一下撒。