我在服务器端用: TListClient=class(Tobject)
DNS,
Name :String;
Listlink :Integer;
Thread :Pointer;
.............保存客户端信息,但是在客户端非法关闭的时候,服务器没有自动刷新列表,我还写了一个刷新列表的函数,但是每次非法退出时都要手动刷新才行,如果不刷新下次列表信息就有问题了。难道非要定时检测吗?不知各位有什么好方法介绍一下,谢谢。再问一下,用IDTCPServer和IDTCPClient数据传输,传输入接收的数据大小多少是最合适的,太大了会不会有数据丢失的现像!
DNS,
Name :String;
Listlink :Integer;
Thread :Pointer;
.............保存客户端信息,但是在客户端非法关闭的时候,服务器没有自动刷新列表,我还写了一个刷新列表的函数,但是每次非法退出时都要手动刷新才行,如果不刷新下次列表信息就有问题了。难道非要定时检测吗?不知各位有什么好方法介绍一下,谢谢。再问一下,用IDTCPServer和IDTCPClient数据传输,传输入接收的数据大小多少是最合适的,太大了会不会有数据丢失的现像!
解决方案 »
- DBGrid行不同颜色显示的问题,在线等
- interbase 数据库创建触发器和存储过程
- 请问如何把一个BYTE类型的数组存入Oracle的blob字段使用ADOQuery
- 1:0放分100
- 能不能抓到子窗口的关闭消息?
- 如何在TDBChart中显示负数?(在线等待!)
- 有关软件打包的小问题--大家讨论!!!(参者有分)
- webbrowser 问题,弹出窗口困扰了很久?
- 如何在一个MDIForm中以ChildForm形式调用一个已有的Form?我将该form的属性改为MDIChild,结果编译不了。不该的话,又不是作为ChildForm调
- 仁者见仁,智者见智,广泛征求意见:关于绘图组件开发问题!!
- 小小问题!
- 关于socket的问题!
TCP的多大不是一样,只是网络不稳定的就容易断线http://lysoft.7u7.net
<用Indy组件开发Socket应用程序>
为什么我就没有编译通过,为什么???
难道真的没有会吗?我想不可能吧,你们在处理在线列表时怎么处理的呢?热心的朋友帮帮忙吧!
用LockList来保证线程安全
List := tcpServer.Threads.LockList;
try
for i := 0 to ListClient.count-1 do
exists := false;
for Count := 0 to List.Count -1 do
if Pointer(List.Items[Count])=listClient[i].pointer then
exists := true;
if not exists then listClient.remove(i);
except
TIdPeerThread(List.Items[Count]).Stop;
end;
finally
tcpServer.Threads.UnlockList;
end;