我现在已经实现P2P的聊天功能,但有一点问题就是如果多个机器同时往一台机器发!怎么创建多个窗体来分别显示不同机器的信息呢?就跟qq一样!名字1发给我的是一个窗口,名字2发给我的是另外的一个窗体,我用SOCKET做的!用什么比较好点?UDP怎么样?大家帮我出个主意,在线等

解决方案 »

  1.   

    用什么方法来存放IP等信息呢?用ARRAYLIST吗?还是有什么别的方法?
      

  2.   

    随便都可以啦....HashTable 吧,用IP做主键...
      

  3.   

    有qq吗>加qq详聊!~是不是还得把这个做成静态的?我qq31585272
      

  4.   

    线程间往另外一个线程传值不太好办的!很麻烦!~比如form call=new from();
    比如有值是这个窗体的!我怎么传~!找到线程?不可能吧!找到这窗口怎么找?麻烦
      

  5.   

    哦!~传第一可以!我用构造!但下个值!
    这样吧!~一个循环
    while(true)
    {
    serverlist.fasongloule=serverListener.AcceptSocket();
    int t = fasongloule.Receive(xinxijieshou);
    string liaotianma = Encoding.Default.GetString(xinxijieshou,0,t);
    string[] liaotianfenxi=Regex.Split(liaotianma,",");
    if (serverlist.shujuip.ContainsKey(liaotianfenxi[0].ToString()))
                 {
    这里怎么找到那个窗体呢?
                 }
                 else
                 {
                     serverlist.shujuip.Add(liaotianfenxi[0].ToString(), liaotianfenxi[0].ToString());
    form call= new form();
    call.show();             }
    }
      

  6.   

    一,一定要线程么?没必要吧
    二,可以把窗体放到一个集合里面,然后就可以遍历了while(true)
    {
    serverlist.fasongloule=serverListener.AcceptSocket();
    int t = fasongloule.Receive(xinxijieshou);
    string liaotianma = Encoding.Default.GetString(xinxijieshou,0,t);
    string[] liaotianfenxi=Regex.Split(liaotianma,",");
    if (serverlist.shujuip.ContainsKey(liaotianfenxi[0].ToString()))
                 {
        遍历集合
                 }
                 else
                 {
                     serverlist.shujuip.Add(liaotianfenxi[0].ToString(), liaotianfenxi[0].ToString());
    form call= new form();
    把 form 加入集合
    call.show();             }
    }
      

  7.   

    大家别嫌我笨.
    第一.怎么加集合
    from[] =new from();
    是这样吗?
    第二,怎么遍历集合?call都是一样的名字!
      

  8.   

    to lhx_0412() :
    可以用UDP打洞的技术...
      

  9.   

    用SOCKET做的!~两个不同的网络不能用!~没做穿透放火墙!~
      

  10.   

    恩!~谢谢!~但还是刚才的问题!希望能给解答一下谢谢
    第一.怎么加集合
    from[] =new from();
    是这样吗?
    第二,怎么遍历集合?call都是一样的名字!
      

  11.   

    汗..办法很多..一样的名字你可以改成不一样,如果是自己玩玩的,可以改例如caption,例如tag,这些地方都可以加上内容加以区别的.....我要玩游戏了..你等 ekinwt(沧海依粟)  解答吧 :)
      

  12.   

    恩!谢谢\!~ekinwt(沧海依粟)解答一下吧!
      

  13.   

    谢谢!我找到方法了!具体如下
    while (true)
                {
                 serverlist.fasongloule=serverListener.AcceptSocket();
                 int t = fasongloule.Receive(xinxijieshou);
                 string liaotianma = Encoding.Default.GetString(xinxijieshou,0,t);
                 string[] liaotianfenxi=Regex.Split(liaotianma,","); 
                    
                 if (serverlist.shujuip.ContainsKey(liaotianfenxi[0].ToString()))
                 {
                     foreach (liaotian f in serverlist.chuangkou)
                     {
                         if (f.Name == liaotianfenxi[0].ToString())
                         {
                             f.jieshouduan.AppendText(liaotianfenxi[1].ToString());
                             break;
                         }
                     }
                 }
                 else
                 {
                     serverlist.shujuip.Add(liaotianfenxi[0].ToString(), liaotianfenxi[0].ToString());
                     serverlist.liaotian[i] = new liaotian();
                     serverlist.liaotian[i].jieshouduan.AppendText(liaotianfenxi[1].ToString());
                     serverlist.liaotian[i].Show();
                 }