找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3593|回复: 5

网络菜鸟的问题集

[复制链接]
发表于 2009-8-26 11:18:32 | 显示全部楼层 |阅读模式
初涉网络,很多问题不明白,项目又急,看书实在来不及了,总结了一些我遇到的问题,暂时先这些,我再遇到问题会逐步往这里添加的。希望大家帮助回答。

1 如果把套接字属性设置为非阻塞模式,再用reactor框架的handle_input接受数据,是不是非阻塞模式就不起作用了?
2 在网络编程中,如果把接收端的套接字缓冲区加大,有何意义?收发两端的套接字缓冲区要一样大吗?
3 由于socket是流试的发送,所以接收端总是收到n包半的情况,然后还要把接收到的数据分包,还要把不足一包的数据缓存起来,下次处理。大家在网络编程中也遇到过这种问题吗?还是我的程序本身造成的?
4 如何能提高接收端的速度?(1) 在一个while中不停调用recv。 (2) 在reactor的handle_input中进行数据接收。(3) 在接收数据的过程中,用一段很大的缓存收数据,在这段很大的缓存收慢后,再进行一次逻辑处理?
5 我用reactor框架写的一个服务器和客户端程序,大体结构是一个服务器和8个客户端跑在同一台机器上。收发的数据量很大,服务器不停的给8个客户端发。此程序在windows下连续运行1周都没问题,可是到了linux下连一个小时都运行不了,服务器端总是发送出错,错误号是104(ECONNRESET),这是为什么呀,我上网查了,不过还是想听听大家的看法。另外,windows比linux那台机器配置好很多。
6 如果用非阻塞模式发送数据,在send返回后,数据是否已经交给了内核?如果send返回后就把发送的数据释放掉了,但由于cpu调度,内核还没来得及把数据发出去,等到内核有机会发数据时,这个数据是不是已经无效了?

[ 本帖最后由 front_windy 于 2009-8-27 11:05 编辑 ]
发表于 2009-8-26 13:57:16 | 显示全部楼层

回复 #1 front_windy 的帖子

我顶啊.......:'( :'( :'( 痛苦中
发表于 2009-8-26 23:20:36 | 显示全部楼层
答案很简单:
基础不够的话,不要用ACE,除非时间充足。否则你会很痛苦。
ACE学习曲线很陡峭,众所周知。不要小看。
发表于 2009-8-27 10:42:39 | 显示全部楼层
老大说的没错,基础部分的问题,建议楼主平时多看书。
否则接下来的路会越来越难走。

另外第一个问题是关于ACE的使用的部分,我来解释一下,
如果楼主是复用用ACE的Connector与Acceptor框架的话,
默认会使用阻塞模式,不过可以修改默认设置未非阻塞模式。
在收发数据的时候,如果是设置了超时,则框架会自动把套接字选项设置为非阻塞。
如果未设置超时,则会依照用户自己设置的情况处理。

[ 本帖最后由 modern 于 2009-8-28 08:59 编辑 ]
 楼主| 发表于 2009-8-27 11:11:51 | 显示全部楼层
谢谢各位的回答。网络编程的几本名著我都入手了,每天晚上都在看。我提的问题可能很多初涉网络的人都遇到过,所以还是想请过来人多提示提示,少走点弯路。另外我增加了问题6,希望大家关注。
发表于 2009-8-27 14:57:03 | 显示全部楼层
send后,是提交到底层的缓冲,由内核发送。非阻塞和异步,有差别的。如果是异步,你需要保证你提交的数据一直有效,如果是非阻塞,OS会告诉你此次发送了多少,然后你自己处理缓冲区。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 00:02 , Processed in 0.013769 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表