请教一个有关P2P中线程被无故中止的事例!

angeryman 2004-08-16 12:13:00
小弟最近写了一个有关通信的程序,但是只要一发消息过后,其中的监听线程会被系统中止,至今未找到原因,请高人指教,在下将不胜感激!
其中主要代码如下:

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Diagnostics;


namespace NetCom
{
/// <summary>
/// MsgBase 的摘要说明。
/// </summary>
///

public class NetBase
{
private TcpListener MsgListener;
private Thread thListen;
private Thread thSend;
private IPAddress SendIP;
private int SendPort;
private string SendMsg;
private bool ServiceState;

public delegate void OnMessageReceiveEventHandler (string SourceString); //定义一个委托,用于将消息侦听循环中的消息传出
public event OnMessageReceiveEventHandler OnMessageReceiveHandler; //定义一个收到消息事件,用于传送消息

public NetBase()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.MsgListener=null;
this.ServiceState=false;
}

//初始化连接
public bool InitListen (IPAddress IP,int Port)
{
bool flag=false;

IPAddress LocaleIP;
int LocalePort;

if (IP.ToString()!="") //判断IP是否为空,不为空就设为本地IP
{
LocaleIP=IP;
}
else
{
IPHostEntry IPInfo=Dns.Resolve("127.0.0.1"); //本地主机IP信息
IPAddress [] IPList=IPInfo.AddressList;
LocaleIP=IPList[0];
}

if (Port<1025)
{
flag=true;
}
else
{
try
{
LocalePort=Port;
this.MsgListener=new TcpListener(LocaleIP,LocalePort); //创建本地侦听对像
}
catch (Exception Error)
{
Debug.WriteLine("连接初始化出错:\n"+Error.ToString());
}
finally
{
flag=true;
}
}

return flag;
}


//开始侦听
public bool StartListen ()
{
bool flag=false;

try
{
this.MsgListener.Start(); //开始侦听
this.thListen=new Thread(new ThreadStart(this.Listener)); //新建侦听线程
this.thListen.Name="MS_Listener"; //给侦听线程命名
this.ServiceState=true;
this.thListen.Start(); //开启侦听线程
}

catch (Exception e)
{
Debug.WriteLine("开启侦听出错:\n"+e.ToString());
}

return flag;
}

//侦听器,接收消息进行消息处理
private void Listener ()
{
TcpClient MsgClient;
NetworkStream MsgStream;
StreamReader MsgReader;

try
{
while (this.ServiceState)
{
MsgClient=MsgListener.AcceptTcpClient(); //本地侦听对像建立
MsgStream=MsgClient.GetStream(); //数据流建立
MsgReader=new StreamReader(MsgStream); //设置读写器


string ReceiveString=MsgReader.ReadToEnd(); //从数据流中读取数据
this.OnMessageReceiveHandler(ReceiveString); //用事件返回消息
Debug.WriteLine(ReceiveString);

MsgReader.Close();
MsgStream.Close();
MsgClient.Close();
}
}
catch (Exception e)
{
//由于终止线程后还处于侦听状,所以会报错
Debug.WriteLine("侦听出错:\n"+e.ToString());

string Error=e.ToString();
}
finally
{
}
}


//停止侦听
public bool StopListen ()
{
bool flag=false;

try
{
this.ServiceState=false;
this.thListen.Abort();
this.MsgListener.Stop();
}
catch (Exception e)
{
Debug.WriteLine("关闭连接出错:\n"+e.ToString());
}

return flag;
}


//确家定是否有挂起的连接请求
public bool IsClientConnect ()
{
bool flag=false;

flag=this.MsgListener.Pending();

return flag;
}


//发送消息
public bool MsgSend (IPAddress HostIP,int HostPort,string SendString)
{
bool flag=false;

if (HostIP==null||HostPort<1025)
{
flag=true;
return flag;
}
else
{
this.SendIP=HostIP;
this.SendPort=HostPort;
this.SendMsg=SendString;

this.thSend=new Thread(new ThreadStart(this.Send));
this.thSend.Name="MS_Sender";
this.thSend.Start();
Thread.Sleep(300);
this.thSend.Abort();
}

return flag;
}

private void Send ()
{
TcpClient ClientWriter=new TcpClient(); //建立远程连接对像
ClientWriter.Connect(this.SendIP,this.SendPort); //连接对像设置

try
{
NetworkStream MsgStream=ClientWriter.GetStream(); //建立数据流
StreamWriter MsgWriter=new StreamWriter(MsgStream); //建立读写器

MsgWriter.Write(this.SendMsg); //将数据写入数据流

MsgWriter.Flush(); //刷新数据流
MsgWriter.Close(); //关闭读写器
MsgStream.Close(); //关闭数据流
ClientWriter.Close(); //关闭连接对像
}
catch (Exception WriteStreamError)
{
Debug.WriteLine("发送消息出错:\n"+WriteStreamError);
}
finally
{
}
}


private string MessageReceive (string SourceString) //消息返回函数
{
string ReceiveString=SourceString;

return ReceiveString;
}
}
}
...全文
135 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
miqier 2004-08-16
  • 打赏
  • 举报
回复
发邮件给我,给你个现成的代码
zhiming@ssreader.com
angeryman 2004-08-16
  • 打赏
  • 举报
回复
????
没人回答?
内容概要:本文详细记录了对一个Android ARM64静态ELF文件字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文步骤进行动态分析与算法验证,深入理解每一步的推理依据。

111,131

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧