[200分请教]出现异常却不知怎么回事?
本人现在做一个实时局域网语音聊天工具,就像IP电话一样
操作系统:win2000(局域网)
涉及技术:BCB的TServerSocket,TClientSocket及多线程还有多媒体MCI的函数
waveInxxx、waveOutxxx等
开发阶段:现在已经有了原型
程序实现:1)Socket工作方式非阻塞式
2)工作双工,两个线程ReceiveAndPlay接收播放,RecordAndSend录音发送
接收发送通过Socket,数据量很大而且不停机(>10*8kps)、每数据包>2K
3)接收、发送都有缓冲队列
问题出处:
1)[目前主要问题]运行时有时会出现严重的内存错误,异常报告如下
异常0x0eedfade位置为0x77e69b01
0x0045c992指令引用0x807f7f83内存,该内存不能为written
0x0045c71e指令引用0x807f7f83内存,该内存不能为written
2)数据包大了,有丢包现象
3)声音有较大延迟、抖动想象
4)在Win98下运行大部分机会是蓝屏出错好像是vxd...?...
可能问题域: 1)是不是数据包太大的缘故?
2)是不是线程安全问题?
3)是不是多媒体设备或由于播放数据包切换频繁原因?
给分原则:
1)声明本人给分信誉良好,200分少可再加
2)回答部分疑问,只要对解决问题有帮助同样酌情给分,哪怕一句话
3)提出有益的类似技术解决方案如NetMeeting、IPPhone等,只要可行可参考
(代码级最好),马上给分。(很急呀!!!大虾们帮忙)
问题点数:200、回复次数:26Top
1 楼leemingsong(陨石)回复于 2001-03-26 15:54:00 得分 0
why?没人过问!!!Top
2 楼ALNG(?)回复于 2001-03-26 16:04:00 得分 100
1)是你的代码的问题,主要因为使用了未分配(初始化)或已释放的指针。
解决办法:调试,设置断点,找出发生错误的位置,判断是哪个指针出的问题;在删除对象时最好
把指针置NULL, 以便于调试。
Borland的Community上有一篇文章将AV问题,你可以去查一下。Top
3 楼holyfire(谁最衰啊你最衰,谁最帅啊我最帅)回复于 2001-03-26 17:14:00 得分 0
可否考虑一下压缩数据减轻网络的压力。Top
4 楼ALNG(?)回复于 2001-03-26 17:17:00 得分 0
Use UDP instead of TCPTop
5 楼ALNG(?)回复于 2001-03-26 17:56:00 得分 0
I 'd like your source code, can you share it with me.
alng@8848.net
Thanks.Top
6 楼yhec(@_@ 俺是贫农俺怕谁)回复于 2001-03-27 08:45:00 得分 20
估计是多线程的问题,C++BUILDER与DELPHI
适合快速编程应用,如数据库应用等,不适
合做实时语言聊天类的东东,这些东东宜选
VC++做;Top
7 楼leemingsong(陨石)回复于 2001-03-27 13:32:00 得分 0
谢谢楼上各位,还有吗???Top
8 楼ALNG(?)回复于 2001-03-27 16:02:00 得分 0
I 'd like your source code, can you share it with me.
alng@8848.net
Thanks. Top
9 楼leemingsong(陨石)回复于 2001-03-27 21:41:00 得分 0
谢谢楼上各位,还有吗??? Top
10 楼Iwant(天狼)回复于 2001-03-27 22:16:00 得分 0
还是我来给你一个吧.
http://hanzc.topcool.net/
有,还有原程序.用 BCB 做的.
好象有好多人问这个问题是不是????????Top
11 楼leemingsong(陨石)回复于 2001-03-30 22:46:00 得分 0
参考了以下,东西相似,有参考价值,谢谢
但异常的问题依然存在,敢问?......Top
12 楼Raptor(猛禽)回复于 2001-03-31 11:18:00 得分 25
1。可能是线程处理中出错,建议用阻塞TCP方式,既然已经用了线程为什么不用阻塞呢。
2。包太大,一般WINSOCK的缓冲不大,4-8K,我用256B的包传过大文件没有问题
3。如果网络速度跟不上,这种情况很难避免,用压缩可能会有改善,加大缓冲也可,但会加大延时。
4。那我就不知道了,这什么原因都可能,估计是线程和SOCKET的问题,与1有关。Top
13 楼leemingsong(陨石)回复于 2001-04-01 19:29:00 得分 0
提问者再加说明:(先谢过楼上各位)
1。单机模拟实现两台机peer to peer好象瞒正常,偶尔蓝屏
2。录音成PCM 11.025KHz不是已经压缩了吗,还要压缩,压缩率会如何
3。Iwant(天狼) 兄提供的线索,该程序在98下只能单工,为什么?
4。目前实现多线程指[录音发送]、[接受播放]两线程,用Socket的阻塞方式能行吗,谁有Socket阻塞方式的示范程序,小弟谢过!Top
14 楼leemingsong(陨石)回复于 2001-04-04 23:45:00 得分 0
?Top
15 楼Iwant(天狼)回复于 2001-04-05 01:32:00 得分 25
出现异常的原因我也不是很清楚.不过我在跟踪时发现一个很奇怪的现象.
当一个 录音buffer 写满时 ,确触发了 3 次 buffer 满事件.
原因我也说不清楚.后来我只有把这个 异常 丢掉 才可以了.
出现异常的原因好象 与 非阻塞方式 无关.而是BCB 处理 Windows 消息时引起的.导致突然在传输是 Socket 中断,引起的,好象是 SendBuffer 函数有问题.
具体原因我也不太明白.Top
16 楼leemingsong(陨石)回复于 2001-04-05 04:28:00 得分 0
提问者再加说明(2):
1.多次运行调试时程序异常出现的CPU窗口,标题好像是TThread,然后指令是关于 :LoadResString的
2。以前曾经做过一个两机互发字符串的程序,如果连续发送,接收方就会丢数据(同样非阻塞方式)
大虾快快帮忙呀!!!我要“死”了Top
17 楼darkwood(堕落天使)回复于 2001-04-06 01:07:00 得分 0
关注!!
楼上的可以把原代码发给我一份吗?wwwfriends@21cn.com. 谢谢。Top
18 楼xskyssdt(ff)回复于 2001-04-06 10:14:00 得分 0
不要用Tserversocket,用socket apiTop
19 楼leemingsong(陨石)回复于 2001-04-07 13:29:00 得分 0
20 楼actinia(海葵)回复于 2001-04-07 23:54:00 得分 0
关注!Top
21 楼leemingsong(陨石)回复于 2001-04-09 14:43:00 得分 0
复1:
ALNG(阿良) 、darkwood(堕落天使) 要源程序,总要等我问题搞定了再说吧
复2:
Iwant(天狼)兄 http://hanzc.topcool.net/ 是你的个人主页吗,参考过你的源代码,
很有帮助,谢谢,希望以后能做个朋友!
复3:ALNG,yhec(^0^),IWant 已得部分分数
//////////////////////////////////////////////////////////////////////
//问题继续:
//1:播放一个个包难以避免包之间会有声音断续,怎么办?
//2: 录好的缓冲已具有波形声音格式(本身已压缩),再压缩怎么办?用Huffman,LZW?
//////////////////////////////////////////////////////////////////////Top
22 楼holyfire(谁最衰啊你最衰,谁最帅啊我最帅)回复于 2001-04-09 15:17:00 得分 10
可以降低声音的采样率,8k就可以了,单声道就可以了。这样声音的数据就不多了,再用ADPCM格式,Huffman压缩应该没问题。Top
23 楼Iwant(天狼)回复于 2001-04-16 22:27:00 得分 20
包当然必须是一个一个播放,有短续 当然是不可避免的了。
关键是要压缩,Huffman 应该没有问题。不过不知道怎么用。
对 http://hanzc.topcool.net 是我的主页Top
24 楼leemingsong(陨石)回复于 2001-05-11 08:48:00 得分 0
虽然文体还没彻底解决,不过呢得到各位大虾帮助深感荣幸,时间也差不多了,东东也做的差不多了,现在就给分吧,两个字“信用”!Top
25 楼ALNG(?)回复于 2001-05-11 09:00:00 得分 0
leemingsong, thanx, but how about your source code?Top
26 楼czylj(夭夭)回复于 2001-05-25 23:36:00 得分 0
udp一次一KTop




