前台是指客户端 后台服务器?
最好把你新建线程的处理函数贴出来,估计是那个出了问题。
从你的描述来看,服务器可以收到客户端的签到,所以通信没有问题,然后服务器向签到了的IP和端口号发包,
如果客户端的新线程要接受到这些报文,必须在原来签到的那个套接字上接收。所以你需要向新线程传递这个套接字

解决方案 »

  1.   

      public void ListenPort()
            {
                IPEndPoint tempEnd = new IPEndPoint(IPAddress.Any, 2525);
                while (runing)
                {
                    Application.DoEvents();
                    try
                    {
                        byte[] recb = listen.Receive(ref tempEnd);                    // 检查所接收到的信息and处理之
                        checkMessage(recb);
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show("出现错误:" + e.Message.ToString());
                        break;
                    }            }
                listen.Close();
                runing = false;
            }public void checkMessage(byte[] recbb)
            {
                RecordsetOperate rso = new RecordsetOperate();
                sendData recData = BytesToStruct(recbb);
                romeName = recData.computerName;
                romeIP = recData.fromIP;
                romeCon = recData.content;
                switch (recData.commandNo)
                {
                    case 0x00: //刷新
                        if (recData.toIP.Equals(myIP))
                        {
                            //在我的同事和成员里 搜索 是否有 此人在线 有将要显示 他的状态  为在线
                            //if (box.FindString(recData.fromIP.ToString() + "  " + recData.computerName) <= 0)
                            //    box.Items.Add(recData.fromIP.ToString() + "  " + recData.computerName);
                            //online.Text = "在线用户:" + (box.Items.Count - 1) + "人";
                            //比较 
                            string ip = recData.fromIP.ToString();
                            string StrAccount = "";
                            string userName = "";
                            string NickName = "";                        if (rso.R_returnUserNameandNumber(ip, ref StrAccount, ref userName, ref NickName) == false)
                            {
                                //没有此用户 添加此用户
                                rso.L_InserColleague(StrUserNumber, "我的同事", StrAccount);
                            }                    }
                        else if (recData.fromIP.Equals(recData.toIP))
                        {
                            //从其他机器发送过来的刷新请求
                            //返回自己的信息
                            mySendData.commandNo = 0x00;
                            mySendData.toIP = recData.toIP;
                            mySendData.content = "上线提示";
                            byte[] sendb = StructToBytes(mySendData);
                            SendPack(sendb);
                            //如果不存在则添加该用户
                            //if (box.FindString(recData.fromIP.ToString() + "  " + recData.computerName) <= 0)
                            //    box.Items.Add(recData.fromIP.ToString() + "  " + recData.computerName);
                        }
                        break;
                    case 0x01: //发言
                        if (recData.toIP.Equals(myIP) && !isfile)
                        {
                            // recData.fromIP
                            //通过IP 获得 用户帐号,通过用户帐号使 用户的 图表 颤动
                            string StrAccount = "";
                            string userName = "";
                            string NickName = "";                        if (rso.R_returnUserNameandNumber(recData.fromIP.ToString(), ref StrAccount, ref userName, ref NickName) == true)
                            {
                                if (MessageBox.Show(NickName + ",来短信了。请注意察收。", "新的短信", MessageBoxButtons.YesNo) == DialogResult.Yes)
                                {
                                    #region 关闭监听
                                    runing = false;
                                    UdpClient mm = new UdpClient();
                                    IPEndPoint tempIPEnd = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2525);
                                    mySendData.commandNo = 0;
                                    mySendData.fromIP = myIP;
                                    mySendData.computerName = myName;
                                    mySendData.toIP = myIP;
                                    mySendData.content = "上线提示";
                                    byte[] sendb = StructToBytes(mySendData);
                                    mm.Send(sendb, sendb.Length, tempIPEnd);
                                    #endregion
                                    #region 显示窗体
                                    Frm_TalkingAndTransfersFile fat = new Frm_TalkingAndTransfersFile();                                fat.ToIp = recData.fromIP.ToString();
                                    Frm_TalkingAndTransfersFile.StrNeiRong = DateTime.Now.ToShortTimeString() + ":" + NickName + "/" + recData.content;
                                    fat.ShowDialog();
                                    #endregion
                                    #region  打开监听
                                    Thread myThread = new Thread(new ThreadStart(this.ListenPort));
                                    myThread.IsBackground = false;
                                    myThread.Start();
                                    #endregion
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        break;
                    case 0x02: //请求传文件
                        if (recData.toIP.Equals(myIP))
                        {//准备接收文件
                            romeFileName = romeCon.Split('+')[0];
                            romeFilel = romeCon.Split('+')[1];
                            readyRecFile();
                        }
                        break;
                    case 0x03://传文件
                        if (recData.toIP.Equals(myIP))
                        {//传送文件
                            // Thread mysend = new Thread(new ThreadStart(sendFile));
                            //mysend.Start();
                        }
                        break;
                    case 0x09: //确认包
                        if (recData.toIP.Equals(myIP))
                            MessageBox.Show("信息来自:" + recData.computerName + "(" + recData.fromIP.ToString() + ")\r\n" + recData.content, "消息");
                        break;
                }        } 我想 楼主 看看 这个 接收 解析 能够 了解点问题  这个我是做的 一个项目