C#论坛-玄机论坛-C#论坛-玄机宝盒-玄机类库-C#

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 304|回复: 2

[已解决] 问一下论坛里的Socket类库源码的一个小问题......

[复制链接]
  • TA的每日心情
    奋斗
    2018-4-19 08:49
  • 签到天数: 2 天

    [LV.1]【初入江湖】

    ShineJun 发表于 2018-4-18 14:18:41 | 显示全部楼层 |阅读模式
    2紫晶
    TcpServer类中有一个向某一位客户端发送信息的 SendToClient(IPEndPoint ip, string SendData),如果我在变量ip直接传入一个IPEndPoint地址,这个地址也已经存在于ClientList中了。为什么会导致下面的Sockets sks执行返回NULL,而发不出消息呢?而如果传入一个像Demo这样的ComboBox集合就不会NULL了。这是为什么呢?
    我是这么调用的,直接在论坛的Demo上添加了textBox1和textBox2,再修改一下。调试时,待客户端连接后,再输入ip和端口......
            //发送消息给指定客户端
            private void btnSendto_Click(object sender, EventArgs e)
            {
                if (cmbClient.SelectedItem != null)
                {
                    IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Parse(textBox1.Text.Trim()), int.Parse(textBox2.Text.Trim()));
                    //server.SendToClient((IPEndPoint)cmbClient.SelectedItem, string.Format("服务端随机消息...{0}", Guid.NewGuid().ToString()));
                    server.SendToClient(ipendpoint, string.Format("服务端随机消息...{0}", Guid.NewGuid().ToString()));
                }
            }


    另外,下面一句
    Sockets sks = ClientList.Find(o => { return o.Ip == ip; });
    这个语句大约....猜测作用是在ClientList集合中查找IP吗?o是什么来的?能否解释一下这个语句是什么作用的?
    初学C#不久,不懂问下轻拍哈~~




    最佳答案

    查看完整内容

    [mw_shl_code=csharp,true] //问题1: IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Parse(textBox1.Text.Trim()), int.Parse(textBox2.Text.Trim())); 你使用new就等于是创建了一个新的IPEndPoint,虽然ip与端口是与(IPEndPoint)cmbClient.SelectedItem一样的, 但是下面我用的比较方式是==,在不重写IPEndPoint的比较方式时,是没有办法相等的.所以你获取的sks是null.如果想让上面的方法成立,那么你只需要修改 Sockets sks ...
    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-8-14 22:07
  • 签到天数: 84 天

    [LV.6]【武林翘楚】

    君临 发表于 2018-4-18 14:18:42 | 显示全部楼层
    [C#] 纯文本查看 复制代码
    //问题1: 
    IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Parse(textBox1.Text.Trim()), int.Parse(textBox2.Text.Trim())); 
    
    你使用new就等于是创建了一个新的IPEndPoint,虽然ip与端口是与(IPEndPoint)cmbClient.SelectedItem一样的,
    但是下面我用的比较方式是==,在不重写IPEndPoint的比较方式时,是没有办法相等的.所以你获取的sks是null.如果想让上面的方法成立,那么你只需要修改
    
    Sockets sks = ClientList.Find(o => { return o.Ip.ToString()==ip.ToString(); }); 这样就可以获取到了.
    
    
    //问题2:
    Sockets sks = ClientList.Find(o => { return o.Ip == ip; });
    这句的意思是在ClientList集合中寻找Ip==ip的对象.  作用等同以下代码
    
    Sockets sks = null;
    foreach(var o in ClientList){
      if(o.Ip == ip){ //find中的o表示每次寻找的元素,也就是这个foreach中的o.
         sks=o ;break;
       }
    }
    






    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-4-19 08:49
  • 签到天数: 2 天

    [LV.1]【初入江湖】

     楼主| ShineJun 发表于 2018-4-19 08:48:25 | 显示全部楼层
    君临 发表于 2018-4-19 01:04
    [mw_shl_code=csharp,true]
    //问题1:
    IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Parse(textBox1. ...

    很感谢大大详细回复,特此谢谢一个
    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复

    使用道具 举报

    *滑动验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    QQ|Archiver|手机版|小黑屋|玄机论坛   

    GMT+8, 2018-10-22 13:10 , Processed in 0.612921 second(s), 25 queries .

    Powered by Msdn5.com

    © 2014-2015 Msdn5 Inc.

    快速回复 返回顶部 返回列表