qq_15619205 2014-12-17 07:57
浏览 739

新手来求助,关于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开头判断错误了呢。】
.帮忙看看它究竟是哪里产生了问题呢。

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

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
    • ¥15 求daily translation(DT)偏差订正方法的代码
    • ¥15 js调用html页面需要隐藏某个按钮
    • ¥15 ads仿真结果在圆图上是怎么读数的
    • ¥20 Cotex M3的调试和程序执行方式是什么样的?