一个困扰很久的问题:Client.RemoteEndPoint与REMOTE_ADDR显示不同IP的原因

服务器在网通网段,客户端在某地区教育网段。

采用http连接时显示的IP:
REMOTE_ADDR:**.29.19.135
HTTP_VIA: NULL
HTTP_X_FORWARDED_FOR:NULL

采用TCP直接连接显示的IP:
TcpClient.Client.RemoteEndPoint:**.67.76.111

以上是现象,所产生的问题:
在服务器端架设的网站,客户端可以正常访问;但是在服务器架设的服务软件,客户端一连上服务端几秒之后就被终止。如果客户端不在本地区的教育网段,都可以正常访问服务软件的。
很奇怪的问题困扰了很长时间,实在没办法,所以在此发帖求助。
按理说可以ping通服务器(用-t参数,会丢一些包但不是很多),可以访问服务器网页,可以访问服务器ftp,而且在访问服务软件时也登陆上了说明在网络层上是畅通的。但是每次在登录服务软件之后,服务器那边的数据就发不过来,send函数捕捉到错误:远程主机强迫关闭一个现有连接。
也不可能是服务软件的问题,因为只有在本地区的教育网内不行,在全国其他任何地方都行。更何况系统自带的远程桌面软件在本地区教育网内也不行,而在其他任何地方都行(服务器端开通了远程桌面服务)。
后来再分析是不是在网络层上某个路由策略限制了端口访问,可是换了很多端口0~1024,1024~10000,以及更高端口都试过也不行。
也不可能是网络繁忙的问题,因为在很多时间段都测试过,没有一次能正常登陆服务软件,没有一次能正常登陆远程桌面(都是一开始很快连接上了,屏幕变黑,可登陆对话框一直不出来,接着就提示网络错误中断)。

而本地区教育网段内唯一与众不同的地方就是上面所说的,在服务端Client.RemoteEndPoint与REMOTE_ADDR显示不同IP。不知道是什么原因造成?所以怀疑是这个问题导致的。
恳请高手指点迷津!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你在使用`udpClient.Receive(ref remoteEndPoint);`时遇到了错误,可能是因为没有正确地接收到数据。这个方法会阻塞程序,直到接收到数据为止。 你可以尝试做以下调整来解决问题: 1. 确保UDP服务器正在发送数据给你的客户端。你可以使用网络调试工具(如Wireshark)来检查网络数据包是否正常到达。 2. 确保指定的IP地址和端口号与服务器端设置的一致。 3. 尝试调整接收缓冲区的大小。有时候数据包太大,超过默认的缓冲区大小,导致接收失败。你可以尝试使用`udpClient.Client.ReceiveBufferSize`属性来设置缓冲区的大小。 下面是一个更新后的代码示例,其中加入了异常处理和调整了接收缓冲区的大小: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; class Program { static void Main() { UdpClient udpClient = new UdpClient("127.0.0.1", 1234); try { string messageToSend = "Hello, UDP Server!"; byte[] sendBytes = Encoding.ASCII.GetBytes(messageToSend); udpClient.Send(sendBytes, sendBytes.Length); IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); // 调整接收缓冲区的大小为8192字节 udpClient.Client.ReceiveBufferSize = 8192; byte[] receiveBytes = udpClient.Receive(ref remoteEndPoint); string receivedMessage = Encoding.ASCII.GetString(receiveBytes); Console.WriteLine("Received: " + receivedMessage); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { udpClient.Close(); } } } ``` 请注意,这个示例仍然只是一个基本的UDP客户端代码,可能需要根据实际需求进行进一步的修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值