我现在要写程序提取IP包包头的IP、端口号、包长等信息,并把提取到的信息迅速写入文件中。程序用在高速网络环境中,所以数据量很大。请问我要学些什么知识?这些工作用C#是不是能胜任?如果用c#不好的话该用什么语言来写呢?因为初次涉及网络编程,还请各位耐心细致指教,谢谢!!

解决方案 »

  1.   

    C#来写客户端似乎没什么胜算,之前有个项目,因为觉得C#没办法在这方面做得很好,所以放弃了一个项目。我个人觉得C++会更好。
      

  2.   


    如果你是想监视网络中数据包的情况,也就是抓取所有的数据,那C#就不行了。正常的应用程序只能接收特定端口的数据.在windows下要想实现这个功用要用到winpcap这个工具包,它可以直接从数据链路层上抓取数据包,在C++上可以直接使用C#也能实现,也是要用winpcap,就是把这个工具包的dll文件中的接口都导到C#里。我这里有在网上下的,已经导好的C#工具包 SharpPcap 很好用可以E-mail:[email protected]向我索取。
      

  3.   

    要学的地方很多,像TCP通讯,相对来讲要简单些,如果是UDP的话,要考滤的地很多
    比穿透NAT与另一个私有网络通讯
    每种NAT的型号不同导至通讯的复杂程序可以看看我写的UDP通讯程序下载地址:http://124.225.112.7/push/ImClient.rar 
    为什么上传不了
      

  4.   

    PPC版: 
    http://124.225.112.7/push/Imc.exe
      

  5.   

    注意 提取到的信息后 用 内存 缓冲 一下 不要 马上 写文件
    至少用一个 8兆的 缓冲池不然 硬盘 io 的代价太恐怖类似 迅雷, BT  等的最小磁盘缓冲区的设置
      

  6.   

    感谢各位的回答,不赞成用c#的朋友是不是因为c#的效率低呢?还是c#不容易实现数据包中包头信息的获取?我的这个程序不需要自己抓包,有专门的线直连到我的网卡上给我发送数据包。是不是只需要绑定一个端口就可以了?用C++更好吗?麻烦各位给我介绍一下,谢谢!
      

  7.   

    socket raw模式 基本能实现你的功能
      

  8.   

    做这些事情 c# 并没有什么优势, 为什么不考虑 c++ 或 c++/Cli ?