本人写的是关于聊天这方面的,就是自己封装了个Client,此类里有通信的对象,以及各个需要的功能函数,还有线程,线程的入口函数如下:
private void clientRun()
{
    byte[] buffer = null;
    while(true)
    {
        MessageBox.Show("新的一轮循环开始...");
        buffer = client.Receive(ref remotePoint);
        MessageBox.Show(remotePoint.Port.ToString());
        try
        {
   object msgObj = P2P.FormatterHelper.DeserializeObj(buffer);
   System.Type msgType = msgObj.GetType();
   if(msgType == typeof(P2P.GetUsersResponseMessage))
   {
   //转换消息 
   P2P.GetUsersResponseMessage usersMsg = (P2P.GetUsersResponseMessage)msgObj;    //更新用户列表
   userList.Clear();
   foreach(User user in usersMsg.UserList)
   {
userList.Add(user);
   }
   //显示在 treeView 上
   ClientApp.formClient.trwShow.Invoke(DrawTreeView,new object[]{userList});
}                                                  
else if(msgType == typeof(P2P.GetUsersIsExistMessage))
{
//服务器发送的测试客户是否在线的消息
P2P.GetUsersIsExistResponseMessage userIsExistResponseMsg = new GetUsersIsExistResponseMessage(this.myName);
         buffer = null;
buffer = P2P.FormatterHelper.SerializeObj(userIsExistResponseMsg);
client.Send(buffer,buffer.Length,hostPoint);
}
         else if(msgType == typeof(P2P.SomeOneCallYouMessage))
{
//转换消息
P2P.SomeOneCallYouMessage purchReqMsg = (P2P.SomeOneCallYouMessage)msgObj;
//发送打洞消息到远程主机
P2P.TrashMessage trashMsg = new TrashMessage();
buffer = null;
buffer = P2P.FormatterHelper.SerializeObj(trashMsg);
         client.Send(buffer,buffer.Length,purchReqMsg.RemotePoint);
}
else if(msgType == typeof(P2P.WorkMessage))
{
//转换消息
P2P.WorkMessage workMsg = (P2P.WorkMessage)msgObj;
// MessageBox.Show("外围的socket:"+ workMsg.Message);

//发送应答消息
P2P.ACKMessage ackMsg = new ACKMessage(); buffer = null;
buffer = P2P.FormatterHelper.SerializeObj(ackMsg); client.Send(buffer,buffer.Length,remotePoint);
MessageBox.Show(remotePoint.Port.ToString());
         //显示message在 CreatForm 中的 richTextBox1中
CreateTalkDelegate(workMsg);
         }
else if(msgType == typeof(P2P.ACKMessage))
{
        this.ReceivedACK = true;
}
else if(msgType == typeof(P2P.TrashMessage))
{
MessageBox.Show("Received a trashMessage!");
}
// Thread.Sleep(100);
}
catch
{
MessageBox.Show("客户端运行出错!");
}
     }
}有2个客户端A ,B,当A向B发送个WorkMessage时,B接受到A的WorkMessage后,就发个回复响应消息给A,此消息是ACKMessage,结果A就是收不到B的回复消息,调试发现,B也确实把ACKMessage发给A了,但是A的Client里的线程里的 入口函数的死循环就是受不到,大家看看撒,在线等...