免费注册 查看新帖 |

Chinaunix

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

怎样能一次connect多次send? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-16 19:48 |只看该作者 |倒序浏览
我希望连接建立一次,发送多次数据,并且每两次发送最好间隔一段时间,比如几秒,这个怎么实现呢?用所谓的长连接吗?
因为每隔几秒中连接一次,有点频繁。

论坛徽章:
0
2 [报告]
发表于 2004-09-16 20:44 |只看该作者

怎样能一次connect多次send?

我得意思是一次connect后多次send和长连接有什么不同吗

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-09-17 06:10 |只看该作者

怎样能一次connect多次send?

所谓长连接,服务方一般不fork子进程,而是提供N个端口同时接收连接请求,
一旦建立连接就不拆连,直到关闭服务为止,接收到数据一般由管道交事务进程池负责处理,如果当中网络断开需要客户端重新建连接;
长连接的通讯模式分单工,双工,单工是双方分别向对方建连接,谁建的连接上只负责发送数据,从对方建立的连接上接收应答;双工是仅由一方负责向对方建立连接,在这个连接上双方既向对方发送请求数据同时也接收对方的应答数据;

你说的1次connect然后送N次请求和长连接的客户端形式上有些类似,但很能满足上述长连接的要求。

论坛徽章:
0
4 [报告]
发表于 2004-09-17 09:40 |只看该作者

怎样能一次connect多次send?

那么如果只用一次connect,不再关闭连接,两端一直通讯,有什么不好吗?(当然,要对连接状态的各种情况进行相应的处理)
另外,再这种情况下,该怎么协调两端的动作呢?
   用select吗?我实验了很多,觉得select并不好用(比如,连接后一方不发数据,另一方也会认为有数据可读。。。),
  或者server端
while(true)
{
   ...
   while(message!=1)              //大概意思
   {
       recv(message);
       Sleep(20);
   }
   send(...);
   ...
}
  
客户端 到时间就发送message=1给server,让他发送数据?这样似乎server端太忙了?
还请指教

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-09-17 10:16 |只看该作者

怎样能一次connect多次send?

select很复杂的,
比如客户端断连,作为服务方会select到有数据要读,
但read结果的长度会是0,这时就可以close对应的连接了;

长连接适合大量通讯时使用,现在很多银行业务无论是否采用诸如tuxdeo的通讯中间件,在后台通讯上基本都采用了这种形式;
缺点是你需要自己维护链路是否畅通,如tcp/ip下你需要定时发个通讯测试包(当然包格式是双方约定的)给对方以检测链路是否通,由于tcp/ip协议本身的缺陷,链路断开到检测到有一个过程,而且网卡驱动还不一定能检测到,只能通过发包的办法来解决

论坛徽章:
0
6 [报告]
发表于 2004-09-18 15:41 |只看该作者

怎样能一次connect多次send?

一次connect后,如果没有异常发生(正常的recv,send,网络也正常),可以连接多长时间呢,有什么限制吗?
还有如果connect后,什么原因会导致连接断开那?
1 网线掉了
2 一方程序死了或者关了
3 ×××(send或recv)阻塞了????会令连接断开马?
4 ?????
还有什么呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP