前台是指客户端 后台服务器?
最好把你新建线程的处理函数贴出来,估计是那个出了问题。
从你的描述来看,服务器可以收到客户端的签到,所以通信没有问题,然后服务器向签到了的IP和端口号发包,
如果客户端的新线程要接受到这些报文,必须在原来签到的那个套接字上接收。所以你需要向新线程传递这个套接字
最好把你新建线程的处理函数贴出来,估计是那个出了问题。
从你的描述来看,服务器可以收到客户端的签到,所以通信没有问题,然后服务器向签到了的IP和端口号发包,
如果客户端的新线程要接受到这些报文,必须在原来签到的那个套接字上接收。所以你需要向新线程传递这个套接字
{
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;
} } 我想 楼主 看看 这个 接收 解析 能够 了解点问题 这个我是做的 一个项目