ServerSocket和ClientSocket通信的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 20050508
  • 开始时间 开始时间
2

20050508

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:
在聊天程序中用ServerSocket和ClientSocket,ServerSocket用非
阻塞模式,我想在程序中增加这个功能,将客户信息(IP,PORT,
登录时间)用ListView显示出来,现在两个问题:
一是当ClientSocket非正常断开时,ServerSocket如何检测到,我
想用当ClientSocket多长时间没有动作就主动断开来实现,怎样实
现好呢?
二是在ListView中显示的顺序与ServerSocket.Socket.Connections
的顺序是不是一致的,在我处理主动断开时有其它ClientSocket动
作时会不会打乱这个顺序,也许是我对Socket非阻塞不是很懂?
请高手回答,最好是有例程,我的邮箱:asanhu@tom.com
 
各位高手:
在聊天程序中用ServerSocket和ClientSocket,ServerSocket用非
阻塞模式,我想在程序中增加这个功能,将客户信息(IP,PORT,
登录时间)用ListView显示出来,现在两个问题:
一是当ClientSocket非正常断开时,ServerSocket如何检测到,我
想用当ClientSocket多长时间没有动作就主动断开来实现,怎样实
现好呢?
二是在ListView中显示的顺序与ServerSocket.Socket.Connections
的顺序是不是一致的,在我处理主动断开时有其它ClientSocket动
作时会不会打乱这个顺序,也许是我对Socket非阻塞不是很懂?
请高手回答,最好是有例程,我的邮箱:asanhu@tom.com
 
一,用record记录下操作时间,加一下定时器处理。
二,和一的问题一样,用record记录下handle,判断一制再进处理。
我手上没有这类程序,你到网上查一下,多。
 
一、当ClientSocket连接时,在ListView中记录一个可生存时间,用定时器
倒计时检测,当ClientSocket多长时间没有动作就主动断开,当在这期间有
动作时,刷新这个时间。可以实现。
二、用ListView显示的顺序与ServerSocket连接ClientSocket的顺序是一致
的,在处理主动断开时有其它ClientSocket动作时不会打乱这个顺序。
三、注意ClientSocket意外断开又连接的情形就可以了。
 
1、在onclienterror中可以判断异常断开,或者用客户端定时向服务器发消息的方法
2、最简单的办法,每当有新连接或者断开连接时把ListView清掉,然后按.Connections的顺序重新添加一次
 
你的这个模式,在服务器端要启动一个监听器,叫scktsrvr.exe,每一个客户端连上来的时候,都会在里面的listview中记录下来。所以,你去看看他的源程序,修改一下,增加你自己的功能,以后就直接启动你修改后的程序来监听了。这个项目文件一般在
C:/Program Files/Borland/Delphi5/Source/Vcl/scktsrvr.dpr
 
自己试了几天,弄出来了,谢谢
 
后退
顶部