关于TCP连接状态修改问题,LIST和datagridview

问题描述

有一个LIST里面存放了连接的客户端IP地址比如里面存放了两个IP地址这个是不固定的.可能会有多个然后有一个datagridview中也存放了多个IP地址我如何判断LIST中的IP地址是否在datagridview中存在,如果存在,那么修改datagridview中的状态参数图标.希望给出具体代码谢谢本人新手.我写的代码如下可是每次如果有新的IP上线总会覆盖掉前面已经成功连接的IP地址我不知道我代码是否判断有问题希望指教foreach(variteminipaddrssList){for(inti=0;i<this.RadarTable.Rows.Count;i++){stringcloseIP=this.RadarTable.Rows[i].Cells["SensorID"].Value.ToString();if(item.ToString()==closeIP){((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("add.png");}else{((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("delete.png");}}}

解决方案

解决方案二:
客户端和服务器的概念,可能你还没有搞明白。先从这方面了解。所谓List<>是存储,所谓DataGridView是UI控件,UI控件背后的数据源才是数据存储。你应该用两个数据存储去进行计算,而不是UI控件。
解决方案三:
你应当写两个方法,一个上线,一个下线,并且每次只修改一行就结束voidOnline(stringip){ipaddrssList.Add(ip);for(inti=0;i<this.RadarTable.Rows.Count;i++){stringcloseIP=this.RadarTable.Rows[i].Cells["SensorID"].Value.ToString();if(item.ToString()==closeIP){((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("add.png");return;}}}voidOffline(stringip){ipaddrssList.Remove(ip);for(inti=0;i<this.RadarTable.Rows.Count;i++){stringcloseIP=this.RadarTable.Rows[i].Cells["SensorID"].Value.ToString();if(item.ToString()==closeIP){((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("delete.png");return;}}}

解决方案四:
上面的item换成ip
解决方案五:
for(inti=0;i<this.RadarTable.Rows.Count;i++){stringcloseIP=this.RadarTable.Rows[i].Cells["SensorID"].Value.ToString();foreach(variteminipaddrssList){if(item.ToString()==closeIP){((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("add.png");}else{((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("delete.png");}}}

解决方案六:
如果非要先更新list再刷新整个界面,你可以先把所有图标换成离线,再把包含在list里那些行的换成在线for(inti=0;i<this.RadarTable.Rows.Count;i++){((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("delete.png");}foreach(variteminipaddrssList){for(inti=0;i<this.RadarTable.Rows.Count;i++){stringcloseIP=this.RadarTable.Rows[i].Cells["SensorID"].Value.ToString();if(item.ToString()==closeIP){((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("add.png");break;}}}

解决方案七:
抱歉,网页卡了,打的全没了for(inti=0;i<this.RadarTable.Rows.Count;i++){stringcloseIP=this.RadarTable.Rows[i].Cells["SensorID"].Value.ToString();((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=ipaddrssList.Exists(item=>item.ToString()==closeIP)?System.Drawing.Image.FromFile("add.png"):System.Drawing.Image.FromFile("delete.png");}

解决方案八:
引用1楼sp1234的回复:

客户端和服务器的概念,可能你还没有搞明白。先从这方面了解。所谓List<>是存储,所谓DataGridView是UI控件,UI控件背后的数据源才是数据存储。你应该用两个数据存储去进行计算,而不是UI控件。

是的但是首先我现在有一张表存放客户端的IP地址,这个时候默认图标都显示成功,然后根据服务端监听过来的客户端IP判断哪一个不在线。所以才产生了我现在的问题。。

时间: 2024-10-08 15:17:56

关于TCP连接状态修改问题,LIST和datagridview的相关文章

查看Apache并发请求数及其TCP连接状态

[文章作者:张宴 本文版本:v1.1 最后修改:2007.07.27 转载请注明出处:http://blog.s135.com] 这两天搭建了一组Apache服务器,每台服务器4G内存,采用的是prefork模式,一开始设置的连接数太少了,需要较长的时间去响应用户的请求,后来修改了一下Apache 2.0.59的配置文件httpd.conf: # prefork MPM# StartServers: number of server processes to start# MinSpareSer

Centos查看apache,nginx并发连接数和TCP连接状态命令

netstat命令和awk来查看web服务器的并发连接数以及TCP连接状态.  代码如下 复制代码 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'   或者:  netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}' FIN_WAIT2        38 CLOSING  

TCP连接状态详解及TIME_WAIT过多的解决方法

  TIME_WAIT状态原理 ---------------------------- 通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态. 客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间(后有MSL的解释),进入CLOSED状态. 下图是以客户端主动关闭连接为例,说明这一过程的.   TIME_WAIT状态存在的理由 ---------------------------- TCP/IP协议就是这样设计的,是不可避

TCP连接状态详解

tcp状态:   LISTEN:侦听来自远方的TCP端口的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认 ESTABLISHED:代表一个打开的连接 FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认 FIN-WAIT-2:从远程TCP等待连接中断请求 CLOSE-WAIT:等待从本地用户发来的连接中断请求 CLOSING:等待远程TCP对连接中断的确认 LAST-ACK:等待

tcp连接的几种状态及连接状态详解

TCP连接示意图如下 通常情况下,一个正常的TCP连接,都会有三个阶段:     TCP三次握手;    数据传送;    TCP四次挥手 里面的几个概念:     SYN: (同步序列编号,Synchronize Sequence Numbers)    ACK: (确认编号,Acknowledgement Number)    FIN: (结束标志,FINish) I. TCP三次握手 客户端发起一个和服务创建TCP链接的请求,这里是SYN(J)服务端接受到客户端的创建请求后,返回两个信息:

Apache中并发控制、查看进程数、TCP连接、压缩功能说明

一:apache有关并发控制 主要是 prefork和worker二个其中一个来控制.我们可以使用httpd -l来确定当前使用的MPM是prefork.c,还是Worker.c. # httpd -l Compiled in modules: core.c prefork.c http_core.c mod_so.c 相关的配置在httpd.conf 当中可以找到 二:查看httpd进程数(即prefork模式下Apache能够处理的并发请求数): ps -ef | grep httpd |

tcp 三次握手和四次断连深入分析:连接状态和socket API的关系

说到tcp协议,凡是稍微看过的人都能顺口说出三次握手和四次断连,再牛逼的一点的就能够把每个状态(SYNC_SENT.CLOSE_WAIT......等)都能背出来, 而说道socket编程,基本上写过网络编程的人都会熟悉那几个标准的API:socket.connect.listen.accept......等 但是,我敢打赌很少有人明白tcp状态和socket编程API之间的关系.不信? 看看如下几个问题你是否知道吧: 1)什么时候客户端才能够连接上server端, 是server端调用bind

如何干掉一条tcp 连接(活跃/非活跃)

如何干掉一条tcp 连接(活跃/非活跃) 背景 最近在测试环境部署服务的时候老是会有端口被占用情况用netstat/ss 查看后发现端口一直被占用 同另外一个ip 建立了tcp 连接,类似于这样: ESTAB 0 0 192.168.103.169:12345 192.168.103.12:10261 当然这个问题也不是最近才遇到,之前也遇到过,不过之前都是很快这个连接就自动消失,我就可以欢快 的使用我自己喜欢的12345 端口,无奈这次一直连续好几天这个连接一直存在导致我一直无法使用这个端口.

《Linux高性能服务器编程》——3.3 TCP连接的建立和关闭

3.3 TCP连接的建立和关闭 本节我们讨论建立和关闭TCP连接的过程. 3.3.1 使用tcpdump观察TCP连接的建立和关闭 首先从ernest-laptop上执行telnet命令登录Kongming20的80端口,然后抓取这一过程中客户端和服务器交换的TCP报文段.具体操作过程如下: $ sudo tcpdump -i eth0 –nt '(src 192.168.1.109 and dst 192.168.1.108) or (src 192.168.1.108 and dst 192