数据不正确 ? 加急求救 !80分送上

hibor 2000-04-13 02:51:00
在客户端接收数据之前已有一个Thread在读该Socket的数据,没数据到来时一直阻塞,当我希望得到数据时将该Thread暂停,然后向服务器发送希望得到数据的请求,服务器响应后首先发出四个字节的数据代表待发数据的总长度,然后发出数据,可这时收到的四个字节的数据是一串无意义的字符,换算成unsigned int 之后很是巨大,若此后将原来Suspend的Thread Resume 再次读取四个字节才得到我所希望的结果,不明白为什么 请高手指点 !
...全文
154 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sniper 2000-04-22
  • 打赏
  • 举报
回复
用非阻塞套接字不可以吗?你的Thread也不一定要挂起呀。
telan 2000-04-14
  • 打赏
  • 举报
回复
我个人感觉这种思路是有问题的,客户端
在接收数据时很可能出问题,因为服务器
端有发送缓冲,比如:
SERVER产生一些数据,发送给CLIENT,这
些数据先放到缓冲区,假设THREAD并没有
接收完数据,即缓冲区还有待发数据,这
时你将THREAD暂停,向SERVER发送命令,
SERVER响应,给CLIENT发送数据,这些
数据也放入缓冲,这样CLIENT如果接收的
话,先接收到的是上次未收完的数据。

我觉得必须将这两个通道分开或者采取
什么特殊机制,来保证数据的正确接收。
hibor 2000-04-14
  • 打赏
  • 举报
回复
实际上我是在写一个client/server的前端control(其中server用JAVA,client和control用VC)
我的思路是这样:在server和control各有两个XIN程分别用来接收和发送数据。
server在工作过程中不定时的产生一些数据(比如当前有新用户登录上去,或是已有用户工作成后离开 就要报告给control),因此在 control可能就要用到一个XIN程不停的去读数据,这就是我那个Thread存在的原因.而control也可以能会控制Server如stop , pause 等 ,现在当我在control 向server送一个命令如╯top)时,我将当前读数据的Thread暂停,发出STOP去后等待sever响应,如响应成功则OK否则将刚才暂停的Thread重启动。
但在过程中遇到了上面的问题请telan兄和大家赐教
telan 2000-04-14
  • 打赏
  • 举报
回复
由于不知道你具体怎么实现的,所以也很难
判断是什么原因,不管怎样,调用Terminate
总不是好事。
如果你的数据是要经过编码、解码,完全可以
自己定义一个数据包格式,全部数据都由线程
来接收,这样也不用挂起再重启。

hibor 2000-04-14
  • 打赏
  • 举报
回复
telan分析的有道理,但我能保证在前一阶段服务器向控制台发送时,已全部被接收正确,因为两边数据交换要经过编码和解码,只有当数据完全传送正确解码才能成功。在现在的代码中我做了一下修改, 将原来的对THREAD的操作Suspend换成Terminate就不会出现前面的问题了,虽然这种方式可以将问题解决但我还是没有真正明白.
telan 2000-04-13
  • 打赏
  • 举报
回复
不明白你的那个Thread有什么用,
为什么不是客户端先向服务器发出请求,
然后服务器再传回4字节长度和数据,弄
那么个Thread干嘛?

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧