Stranger·Li
Stranger·Li
Since you asked the question in Chinese, I will answer it in Chinese。 一般情况下,这种是不会的,目前我所知的,下列情况中的【任何一个】都会导致你的问题: 1. 如果你使用了反向代理,如Nginx、CDN等,在没有正确配置的情况下,会导致程序无法正确获取客户端IP地址。 2. 如果你的服务器部署在公网,且你的局域网出口开启了NAT,会导致程序获取到的IP地址为你的出口公网地址。 3. 如果你的服务器部署在内网,但是你的WIFI使用了NAT技术,会导致程序获取到的地址为WIFI的公共地址。 4. 如果你手机使用的是PC的共享热点网络,会导致程序获取到的地址是PC的地址。 获取到的IP会是一下几种: 1. 情况1,获取到的IP地址是反向代理服务器的IP,或CDN服务器组的IP。 2. 情况2,获取到的IP地址是运营商分配给你公司的出口IP地址,即IP地址不属于10.0.0.0-10.255.255.255、172.16.0.0-172.31.255.255、192.168.0.0-192.168.255.255。 3. 情况3,获取到的IP地址是WIFI的IP地址,且IP地址不是你手机或PC的任意一个IP地址,且属于10.0.0.0-10.255.255.255、172.16.0.0-172.31.255.255、192.168.0.0-192.168.255.255。 4....
他这种情况,在使用串口服务器时,可能会频繁复现。我之前遇到过类似情况,所以魔改过FixHeaderPipelineFilter。 复现条件如下: 3台设备:高频率自上报串口设备(如高精度电子秤等)、串口转TCP设备(串口服务器)、supersocket服务器 复现原理: 1. 串口设备是无法侦测TCP连接状态的,他是无脑向串口(RS232等)发送数据。 2. 串口服务器,只进行数据封包转发,在TCP连接建立后,即将串口数据转发到TCP Stream中 3. 在以下时间节点,比如TCP连接建立成功时,串口刚好发送了一半的报文至【串口服务器】,那么TCP服务器将会收到1个半包的报文。 另外还有一种其他的可能性:基于部分底层硬件开发人员的认知水平,他们将心跳报文视为必须发送至少1个子节,有些设备的实现就是发送一个FF,作为心跳
为了应对这些情况,我的程序在应对工业物联网连接时,基本上使用的都是自定义PipelineFilter