用 ServerSocket 写了个聊天服务程序,非阻塞模式,平均在线40多人,每次连续运行三天后程序就当掉,200分请高人相助。(200分)

  • 主题发起人 主题发起人 yshu
  • 开始时间 开始时间
Y

yshu

Unregistered / Unconfirmed
GUEST, unregistred user!
当掉时没有错误提示,用户数据库 ACCESS2000 用ADO联接 ,有时当了后马上重开会有端口
占用的错误,ServerSocket 用 sendtext() 转发聊天内容。
 
你说的问题太抽象了。我想是不是服务器资源并没有得到有效释放所造成的。
 
没办法,不知道是哪部分出错,ADO还是ServerSocket,程序异常中止时NT应用程序事件
显示是非法操作,程序里只Create Tstringlist对象,每次也都释放了,每次运行三天后
异常中止程序,看上去好象是资源占用的问题,ServerSocket 非阻塞模式完成发信后
要释放连上来的 Socket吗?我只是 Socket.close 没有 Socket.Free
 
这种类型的程序建议还是用Socket API开发吧。更可靠。
以前用ServerSocket也是老有些不太可靠的地方。
你可先对临界部分加try保护,并加入log信息,分析log文件了。
 
try保护、加入log信息这些我都做了,请问我没有 Socket.free 是不是占用了资源?
 
我见过这种问题,但是不清楚是怎么回事,据估计是一些客户端非正常断线后,SendText的
数据没有被发到客户端,而留在了服务器端,当超过一定数量后造成系统崩溃
 
我也想作这样的程序,我想请问,假如在客户端同时有两条信息过来,
服务器接受信息会发生冲突吗?socket应该怎么样释放呢?还有这种
程序需要什么样的保护机制呢?这些东西我也高不清楚,能指点一下吗??

另外为什么有的机器上执行client程序,会发生Asynchronous socket
error 10061 呢?什么原因?

请各位高手帮忙解答!!谢谢!
 
如果要寫聊天程序,有一套好的控件,在DELPHI6.0中的INDY控件,它對流的操作和遠程訪問比較好!!
 
WebBar 所讲好象有道理,唉~~真烦,白写了,好心人再帮我想想办法啊,
本来是冲着 Serversocket 写得方便简单,搞着玩的,没想到花了那么多时间,还没搞象
测试地址:61.132.118.33/chat
等以后有空时候听 hmaik 的,换 SocketAPI 试试。
 
我两端的软件都做过,服务端用异常保护起来,就没什么大问题了
 
10061 好象是连不上时的错误信息,将错误返回码设为 0,就不出现了
 
用异常保护起来,oicq就这样嘛!
 
服务端用异常保护? 我在每个可能出现异常的地方都 Try 了,用TApplictionEvents 捕捉
错误信息写到log里,运行下来一般连续三天不会有任何错误,但程序说当就当。看来不是
常规性异常。还是怀疑Socket buffer 溢出,(客户端非正常断线后,SendText的
数据没有被发到客户端,而留在了服务器端)非正常断线异常程序已经做了处理。我试试
在每一个socket.close 后加上 socket.free 试试,估计也不太可能解决问题。
 
yshu 请教一下如何作保护机制?能说得详细点吗?谢谢!!
 
在OnError事件中
将 ErrorCode = 0;
 
又试了一次,运行了3天不到程序异常中止,没有任何提示,发生程序自己关闭异常时是
早上8点多,那时聊天的不会有超过10个人的,看来是哪里的资源累积没有释放造成的,
是哪儿不对啊???急死人了
 
Delphi得Socket封装的太好,没法扩展,再说它有Bug,我看还是用API写!
 
你的 OS 是什么?
 
同意WebBar的看法。
我用BCB中的Socket写通信程序时也有这样的错误出现过。原因至今不详。
Delphi BCB真是手足情深阿!:-(
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
619
import
I
后退
顶部