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 安卓adb backup备份应用数据失败
    • ¥15 eclipse运行项目时遇到的问题
    • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
    • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
    • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
    • ¥50 成都蓉城足球俱乐部小程序抢票
    • ¥15 yolov7训练自己的数据集
    • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
    • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
    • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)