不包含适合于入口的静态Main方法是什么意思

sunxuweitomm1992 2015-04-02 02:38:09
代码如下,不懂c#,请问一运行就出现不包含适合于入口的静态“Main”方法是怎么回事?应该怎么修改?多谢!!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading;
using SharpPcap;
using PacketDotNet;
using SharpPcap.LibPcap;


namespace ServerToolV0._1.Capture
{
public class WinCapHelper
{


private static object syncObj = new object();
private static WinCapHelper _capInstance;
public static WinCapHelper WinCapInstance
{
get
{
if (null == _capInstance)
{
lock (syncObj)
{
if (null == _capInstance)
{
_capInstance = new WinCapHelper();
}
}
}
return _capInstance;
}
}


private Thread _thread;


/// <summary>
/// when get pocket,callback
/// </summary>
public Action<string> _logAction;


/// <summary>
/// 过滤条件关键字
/// </summary>
public string filter;


private WinCapHelper()
{


}


public void Listen()
{


if (_thread != null && _thread.IsAlive)
{
return;
}


_thread = new Thread(new ThreadStart(() =>
{


////遍历网卡
foreach (PcapDevice device in SharpPcap.CaptureDeviceList.Instance)
{
////分别启动监听,指定包的处理函数
device.OnPacketArrival +=
new PacketArrivalEventHandler(device_OnPacketArrival);
device.Open(DeviceMode.Normal, 1000);
device.Capture(500);
//device.StartCapture();
}
}));
_thread.Start();
}


/// <summary>
/// 打印包信息,组合包太复杂了,所以直接把hex字符串打出来了
/// </summary>
/// <param name="str"></param>
/// <param name="p"></param>
private void PrintPacket(ref string str, Packet p)
{
if (p != null)
{
string s = p.ToString();
if (!string.IsNullOrEmpty(filter) && !s.Contains(filter))
{
return;
}


str += "\r\n" + s + "\r\n";


////尝试创建新的TCP/IP数据包对象,
////第一个参数为以太头长度,第二个为数据包数据块
str += p.PrintHex() + "\r\n";
}


}


/// <summary>
/// 接收到包的处理函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void device_OnPacketArrival(object sender, CaptureEventArgs e)
{
////解析出基本包
var packet = PacketDotNet.Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);


////协议类别
// var dlPacket = PacketDotNet.DataLinkPacket.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);


//var ethernetPacket = PacketDotNet.EthernetPacket.GetEncapsulated(packet);


//var internetLinkPacket = PacketDotNet.InternetLinkLayerPacket.Parse(packet.BytesHighPerformance.Bytes);
//var internetPacket = PacketDotNet.InternetPacket.Parse(packet.BytesHighPerformance.Bytes);


//var sessionPacket = PacketDotNet.SessionPacket.Parse(packet.BytesHighPerformance.Bytes);
//var appPacket = PacketDotNet.ApplicationPacket.Parse(packet.BytesHighPerformance.Bytes);
//var pppoePacket = PacketDotNet.PPPoEPacket.Parse(packet.BytesHighPerformance.Bytes);


//var arpPacket = PacketDotNet.ARPPacket.GetEncapsulated(packet);
//var ipPacket = PacketDotNet.IpPacket.GetEncapsulated(packet); //ip包
//var udpPacket = PacketDotNet.UdpPacket.GetEncapsulated(packet);
//var tcpPacket = PacketDotNet.TcpPacket.GetEncapsulated(packet);


string ret = "";
PrintPacket(ref ret, packet);
//ParsePacket(ref ret, ethernetPacket);
//ParsePacket(ref ret, internetLinkPacket);
//ParsePacket(ref ret, internetPacket);
//ParsePacket(ref ret, sessionPacket);
//ParsePacket(ref ret, appPacket);
//ParsePacket(ref ret, pppoePacket);
//ParsePacket(ref ret, arpPacket);
//ParsePacket(ref ret, ipPacket);
//ParsePacket(ref ret, udpPacket);
//ParsePacket(ref ret, tcpPacket);




if (!string.IsNullOrEmpty(ret))
{
string rlt = "\r\n时间 : " +
DateTime.Now.ToLongTimeString() +
"\r\n数据包: \r\n" + ret;
_logAction(rlt);
}


}




public void StopAll()
{
foreach (PcapDevice device in SharpPcap.CaptureDeviceList.Instance)
{


if (device.Opened)
{
Thread.Sleep(500);
device.StopCapture();
}


_logAction("device : " + device.Description + " stoped.\r\n");
}


_thread.Abort();
}


}
}
...全文
187 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztenv 版主 2015-04-03
  • 打赏
  • 举报
回复
引用 3 楼 sunxuweitomm1992 的回复:
请问那个main函数要加到哪里呢?怎么编写呢
不用手动编写,新建一个C#的console application就自动有了,然后把你的代码合并过去,
ztenv 版主 2015-04-03
  • 打赏
  • 举报
回复
必须要在某个类中实现一个静态的main函数,那是C#程序的入口,C#程序始于main,结束于main
sunxuweitomm1992 2015-04-02
  • 打赏
  • 举报
回复
请问那个main函数要加到哪里呢?怎么编写呢
此后三年 2015-04-02
  • 打赏
  • 举报
回复
这只是一个类的声明加实现啊, 就像C程序一样, 也要有一个main函数的入口点, 或者是你把这个项目设置为启动项了
赵4老师 2015-04-02
  • 打赏
  • 举报
回复
请楼主移驾C#论坛。http://bbs.csdn.net/forums/CSharp

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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