我用D6的tserversocket / tclientsocket 控件,servertype采用:stNonBlocking ,做一个TCP/IP的通信软件。
我的客户端是n个GPRS 终端,所以不用管它。可是,终端它可能有不可知的中断,比如突然断电等情况,所以这里就有一个问题:当终端不可知的中断的情况下,主站是肯定不知道的,而且,socket 连接的数组也不会减少的,也就是中断的SOCKET 套接字不能及时的删除,那么主站它会定时下达指令时,也会向这个已中断的SOCKET发指令,所以这时发送的指令是无法返回的。请问我要如何维护SOCKET 的CONNECTION[K],就是要删除数组中的某个数;
serversocket.socket.connection[k].close;
以上这句是用来关闭一个连接,但不是用来删除数组中的一个数;
************************
//统计在线的终端数:
statusbar1.Panels.Items[5].Text:= inttostr(serversocket1.socket.activeconnections);
用以上这句可以统计在线有套接字数,也就是有多少可用的SOCKET,但问题是假设目前我只有3个测试点,可能是中断后再登录上来,所以统计出来有5或者更多个。请问我要怎么正确维护socket的connection 的数组啊?
也就是我有几个终端,就应该有几个SOCKET。
***********************
我还用ListView1,来记录当前登录的终端,ListView1记录有如下几个项目:
序号、GPRS ID 号、终端IP 地址、端口号
var
newitem:tlistitem;
-----------------------------
//登录的子站
newitem:=listview1.Items.Insert(listview1.Items.Count); //插入的位置;
newitem.Caption:=inttostr(listview1.Items.Count-1);
newitem.SubItems.Add(gprsid);
newitem.SubItems.Add(socket.RemoteAddress);
newitem.SubItems.Add(inttostr(socket.RemotePort));
请问我要如何才能保证有效的SOCKET与LISTVIEW1中记录的一致?这样才能正确通信。
谢谢!
对了,我的网名叫:solonet
qq:28972303
email:solonet@163.net