c# mono linux Socket RemoteEndPoint == 相等 一直 false

这几天又遇到一个挺怪的坑,记录一下

一句话概括:RemoteEndPoint的返回是new出来的,所以不相等,不理解的看相等运算符(C# 参考)

故事:一个socket服务端程序,在windows上运行正常,于是想放到linux服务器上看看效果,用的mono,结果运行到一半不正常了,于是开始排查(这个排查没法打断点什么的所以其麻烦无比,要在不同位置Console打出看然后判断),最后一步一步锁定到了这个效果

var a = task.Result.RemoteEndPoint;
var b = a;
var c = a;
var d = task.Result;
var e = task.Result;
Console.WriteLine(b == c);//ture //不是重载==
Console.WriteLine(d.RemoteEndPoint == e.RemoteEndPoint);//false 
Console.WriteLine(e.RemoteEndPoint == e.RemoteEndPoint);//false //确定问题再属性RemoteEndPoint上
Console.WriteLine(task.Result.RemoteEndPoint == task.Result.RemoteEndPoint);//false

这个时候猜测到是RemoteEndPoint每次的返回都不是同一个对象
追了一下找到了这几句(简化版的RemoteEndPoint {get}):

SocketAddress socketAddress = m_RightEndPoint.Serialize();
m_RemoteEndPoint = m_RightEndPoint.Create(socketAddress);
return m_RemoteEndPoint;

Create(IPEndPoint的)也看了,反正肯定是新new出来的(new的位置在System.Net.SocketAddress.GetIPEndPoint()里有一句return new IPEndPoint(iPAddress, port);),这样就解释了问题。

这个过程和错误足以体现本人有多菜了

不过还有个问题,为啥windows上直接运行没这问题。上面那一大排全是true,希望有大佬解答

解决方法

((IPEndPoint)socket.RemoteEndPoint).Equals(yourRemoteEndPoint)

或者

socket.RemoteEndPoint.ToString() == yourRemoteEndPoint.Tostring()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1。这个都是自己慢慢摸索的。mono for andriod ,资料真的太少了。 2.正在做安卓手机的项目。选择这条路都不知道能不能坚持下去。 3.希望有同样迷惑的人,照亮一点前面的路,也希望能照亮自己。 4.下面的代码运行环境 VS2012 + mono for andriod 4.8 java -sdk 与 mono for andriod 4.8 见下面的网盘 希望到时,这个网盘没有被封。 http://pan.baidu.com/s/1sjqMsqT 安装教程 http://www.51mono.com/article/show/172 http://www.51mono.com/article/show/96 安卓模拟器,推荐使用 Genymotion。 具体的安装教程,就请网上找吧。我实在没有力气了。 不过在模拟时,还是有点不够爽。 由于是 mono for andriod 专业破解版,所以可以直接使用 真机运行的。 我就是用 小米3 来运行。问题比较少。 另外要吐槽一下的是,开发这个手机APP,真的很耗内存。为此我不得不把我的老爷机换了4G的内存条。 由于是老爷机,内存条好贵的呀。 5,windows 开发环境 是 win8.1. 32位。 6.希望我啰嗦的这么多信息对你有用。 7.下面是正题了。 这个压缩包中,包含 C#写的服务端。 和 mono for andriod ---c# 写的手机客户端。 实现简单的 Socket --TCP/IP 通信。 其实,使用的类 和语法代码与 普通PC机的一样。但 手机客户端,还是有点点区别。 在pc客户端中,使用线程收取 信息,然后打印到UI控件上,是使用委托进行。 在手机APP中,有一个专门的方法来把这个信息寄送到 UI线程,然后在 UI控件上进行显示。 在例子中,有体现。 8.好了,就这么多了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值