免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1198 | 回复: 4
打印 上一主题 下一主题

关于socket通讯问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-27 12:39 |只看该作者 |倒序浏览
我编写了一个局域网内的客户端/服务器程序,其中服务器使用Windows系统(VC编程),客户端使用linux系统(C语言编程).服务器每30秒向客户端发送查询信号,来判断客户端是否运行正常,客户端接收到以后立即向服务器反馈;在此同时,服务器根据设置需要,随时要向客户端发送各种指令信号。在程序调试过程中,发现客户端运行一段时间后,接收的服务器的指令或查询信号比较混乱,使得客户端不能按照设计要求运行,不知是什么原因。是不是有这种原因:服务器的查询信号和指令信号在某一时间同时向客户端发送,因为客户端用select函数判断套接口是否有数据进来,判断时间间隔为1秒,也就是在这1秒钟时间里,同时有查询信号和指令信号进入套接口,致使客户端无法正确判断接收到的是查询信号还是指令信号,我的客户端接收思路如下:
while(1)
{
  FD_ZERO(&rdset);
  FD_SET(sd, &rdset);
  tv.tv_sec = 1;
  tv.tv_usec = 0;
  switch(select(FD_SETSIZE, &rdset, NULL, NULL, &tv))
  {
    case -1: ...
    case  0: ...
    default: ...
  }
}
用select函数判断套接口是否有数据进来,时间间隔为1秒。
如果不是上面原因,该如何解决此问题。

论坛徽章:
0
2 [报告]
发表于 2007-02-27 13:26 |只看该作者
我觉得和select没什么关系,应该是read之后的处理问题。
比如定义了2个命令,QRY为查询,CMD为指令,如果服务器先发查询再发指令,
等客户端去读的时候就有可能读到QRYCMD,也就是你说的混乱。

所以问题的关键是设计好命令格式,怎么知道收到了完整的命令,任何拆开多条命令等等。

论坛徽章:
0
3 [报告]
发表于 2007-02-28 16:07 |只看该作者
觉得这是一个设计问题,需要对报文进行规范,还要对通信流进行规范。

论坛徽章:
0
4 [报告]
发表于 2007-02-28 17:35 |只看该作者
原帖由 it_0508 于 2007-2-28 16:07 发表
觉得这是一个设计问题,需要对报文进行规范,还要对通信流进行规范。

right!
这东西偶做了n个项目了,都麻木了

论坛徽章:
0
5 [报告]
发表于 2007-02-28 21:10 |只看该作者
时间是不能依赖的。需要客户程序通过报文检查判断服务器消息的类型。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP