我现在做了一个gprs的通讯程序,关于socket通讯部分的思路如下:
1、创建socket连接,socket创建成功就listen,启动监听线程。
2、监听线程accept有连接,先判accept函数返回是否有效,有效就创建一个clientsstruct的连接信息(信息:accept返回结果、对方IP地址、收到连接时间等),信息add到一个clientslist(TList类型)的数据上,启动数据接收处理线程。现在发现一个问题:我先界面显示这个连接的List,发现有很多的连接,比如我接了5个DTU,这里连接会有超过5个,好多连接我接收时间很接近,有IP地址一样的,也有IP地址变化的,只是时间上就几秒的前后。问:1、一个客户端连接到服务器后,如果网络通讯正常的情况下,会有多次accept到吗?
    2、假若GPRS模块周围的有干扰,在网络连接上会频繁变IP吗?

解决方案 »

  1.   

    一个客户只会有一个accept,GPRS一旦连接上,通常IP地址不会变化.
      

  2.   

    看楼主的描述的情况问题是不是出在DTU那边啊,GPRS连接会有延时的情况DTU那边是怎么判断连接超时的,如果是固定判断给定的时间没返回就认为超时了(有可能你这边还没接到DTU的请求那就再发一次请求过来这就会导致你有多个accept list)再向你发起连接那就会出现楼主所说情况。
      

  3.   

    1、一个客户端连接到服务器后,如果网络通讯正常的情况下,会有多次accept到吗?
    一个SOCKET连接一次会产生一次Accept,如果网络通讯正常的情况下,不会有多次Accept,除非客户端重连;
    2、假若GPRS模块周围的有干扰,在网络连接上会频繁变IP吗?
    GPRS属于拨号网络,如果网络连接断开,重新拨号就可以改变IP,如果拨号就不会;客户端重连也不会导致客户端IP变化;