我把连接进来的GPRS ID 号写在控件listview1中。 当客户端不可知中断后,下次再进来时,我只能根据它的GPRS ID 号来判断是否删除原来的记录,然后再把现在的记录写进去。可是如果只有一个GPRS ID 的时候,是没有问题的,一旦,多个ID 都进来时,删除掉不可知的SOCKET后,指令就发送不成功了。
请问:我做了个基于TCP/IP协议的程序,用控件:serversocket/clientsocket我把连接进来的GPRS ID 号写在控件listview1中,有3个以上的GPRS ID 。 当客户端不可知中断后,下次再进来时,我只能根据它的GPRS ID 号来判断是否删除原来的记录,然后再把现在的记录写进去。可是如果只有一个GPRS ID 的时候,是没有问题的,一旦,多个ID 都进来时,删除掉listview1中现在不存在的GPRS ID 及相关的IP、SOCKET等,不可知的SOCKET后,指令就发送不成功了。 这是为什么?
下面是一些错误信息。41836 211.138.143.245 2004-3-17 10:13:44 错误事件是:An error occurred when trying to close a connection. ----------------------------------------------------------- TCP/IP 连接发生错误!错误号为:10053 44267 211.138.143.249 2004-3-17 10:13:38 错误事件是:An error occurred when trying to close a connection. ----------------------------------------------------------- TCP/IP 连接发生错误!错误号为:10053 回复 ID=0000 的脉波帧命令! ----------------------------------------------------------- 1 捕捉到来自 ID=0000 的脉波帧命令!5C 53 04 00 00 A2 24 79 ----------------------------------------------------------- 客户端登录 来自:211.138.143.249 句柄为:796 端口号:44267 数目0 ----------------------------------------------------------- 不可知中断原因的客户端已删除! ----------------------------------------------------------- 41969 211.138.143.195 2004-3-17 10:10:38 错误事件是:An error occurred when trying to close a connection. ----------------------------------------------------------- TCP/IP 连接发生错误!错误号为:10053 回复 ID=0000 的脉波帧命令! ----------------------------------------------------------- 1 捕捉到来自 ID=0000 的脉波帧命令!5C 53 04 00 00 A2 24 79 ----------------------------------------------------------- 来自IP:211.138.143.195 发回的数据包 长度:26 内容:5C 53 16 00 00 A1 FE 68 50 68 32 02 00 00 68 81 06 43 C3 83 93 34 33 C6 16 06 -----------------------------------------------------------
如果有很多客户端连接到服务器端,那么在服务端程序中我要如何主动关闭某一个socket套接字呢?
当客户端不可知中断后,下次再进来时,我只能根据它的GPRS ID 号来判断是否删除原来的记录,然后再把现在的记录写进去。可是如果只有一个GPRS ID 的时候,是没有问题的,一旦,多个ID 都进来时,删除掉不可知的SOCKET后,指令就发送不成功了。
当客户端不可知中断后,下次再进来时,我只能根据它的GPRS ID 号来判断是否删除原来的记录,然后再把现在的记录写进去。可是如果只有一个GPRS ID 的时候,是没有问题的,一旦,多个ID 都进来时,删除掉listview1中现在不存在的GPRS ID 及相关的IP、SOCKET等,不可知的SOCKET后,指令就发送不成功了。
这是为什么?
211.138.143.245
2004-3-17 10:13:44
错误事件是:An error occurred when trying to close a connection.
-----------------------------------------------------------
TCP/IP 连接发生错误!错误号为:10053
44267
211.138.143.249
2004-3-17 10:13:38
错误事件是:An error occurred when trying to close a connection.
-----------------------------------------------------------
TCP/IP 连接发生错误!错误号为:10053
回复 ID=0000 的脉波帧命令!
-----------------------------------------------------------
1
捕捉到来自 ID=0000 的脉波帧命令!5C 53 04 00 00 A2 24 79
-----------------------------------------------------------
客户端登录 来自:211.138.143.249 句柄为:796 端口号:44267
数目0
-----------------------------------------------------------
不可知中断原因的客户端已删除!
-----------------------------------------------------------
41969
211.138.143.195
2004-3-17 10:10:38
错误事件是:An error occurred when trying to close a connection.
-----------------------------------------------------------
TCP/IP 连接发生错误!错误号为:10053
回复 ID=0000 的脉波帧命令!
-----------------------------------------------------------
1
捕捉到来自 ID=0000 的脉波帧命令!5C 53 04 00 00 A2 24 79
-----------------------------------------------------------
来自IP:211.138.143.195 发回的数据包
长度:26
内容:5C 53 16 00 00 A1 FE 68 50 68 32 02 00 00 68 81 06 43 C3 83 93 34 33 C6 16 06
-----------------------------------------------------------
我想问的是:serversocket.socket.connection[i] 是由serversocket 自己来维护的吗?
也就是说,I 的值是从0 到 正常连接的数目减1,对不对?还有,在server端我要如何主动
释放一个socket连接,是不是 serversocket.socket.connections[i].close ; ?如果是的
话,那我要如何把它和listview1.items.item 对应起来呢?
还有,我在和其它GPRS 子站通信时,要如何换另一个SOCKET,是不是用:
ServerSocket1.Socket.Connect(i);也就是先和另一个线程连接上后再进行通信?
ServerSocket1.Socket.Connect(i).sendbuf();