首页 - C#.NET

使用C#与NNTP服务器交互!

发布时间: 2007-04-19 02:48    作者: 未知    来源: 未知    浏览:    评论

  
using System;
using System.Text;
using System.Net;
using System.IO;
using System.Net.Sockets;
using System.Collections;
using System.Diagnostics;
namespace NntpTools {
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class Debug {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args) {
   NNTPClass nc=new NNTPClass();
   nc.Connect("msnews.microsoft.com");
   ArrayList grouplist=nc.GetNewsgroups();
   for(int i=0;i<grouplist.Count;i++){
    Console.WriteLine(grouplist[i].ToString());
   }
   ArrayList cardlist=nc.GetNews("microsoft.public.cn.dotnet.framework");
   Console.WriteLine("=============================================================");
   StreamWriter sw=File.CreateText("c:\\news.txt");
   for(int i=0;i<cardlist.Count;i++){
    Console.WriteLine(cardlist[i].ToString());
    sw.WriteLine(cardlist[i].ToString());
    sw.WriteLine("=============================================================");
   }
   sw.Flush();
   sw.Close();
   nc.Disconnect();
   
   Console.ReadLine();
  }
 }
 class NNTPClass:System.Net.Sockets.TcpClient{
  public void Connect(string server){
   string response;

   Connect(server, 119);
   response = Response();
   if (response.Substring( 0, 3) != "200") {
    throw new Exception(response);
   }
   
  }
  public void Disconnect() {
   string message;
   string response;

   message = "QUIT\r\n";
   Write(message);
   response = Response();
   if (response.Substring( 0, 3) != "205") {
    throw new Exception(response);
   }
  }
  public ArrayList GetNewsgroups() {
   string message;
   string response;

   ArrayList retval = new ArrayList();

   message = "LIST\r\n";
   Write(message);
   response = Response();
   if (response.Substring( 0, 3) != "215") {
    throw new Exception(response);
   }

   while (true) {
    response = Response();
    if (response == ".\r\n" ||
     response == ".\n") {
     return retval;
    }
    else {
     char[] seps = { ' ' };
     string[] values = response.Split(seps);
     retval.Add(values[0]);
     continue;
    }
   }
  }
  public void Post(string newsgroup, string subject, string from, 
   string content) {
   string message;
   string response;

   message = "POST " + newsgroup + "\r\n";
   Write(message);
   response = Response();
   if (response.Substring( 0, 3) != "340") {
    throw new Exception(response);
   }

   message = "From: " + from + "\r\n"
    + "Newsgroups: " + newsgroup + "\r\n"
    + "Subject: " + subject + "\r\n\r\n"
    + content + "\r\n.\r\n";
   Write(message);
   response = Response();
   if (response.Substring( 0, 3) != "240") {
    throw new Exception(response);
   }
  }

  public ArrayList GetNews(string newsgroup) {
   string message;
   string response;

   ArrayList retval = new ArrayList();

   message = "GROUP " + newsgroup + "\r\n";
   Write(message);
   response = Response();
   if (response.Substring( 0, 3) != "211") {
    throw new Exception(response);
   }

   char[] seps = { ' ' };
   string[] values = response.Split(seps);

   long start = Int32.Parse(values[2]);
   long end = Int32.Parse(values[3]);

   if (start+100 < end && end > 100) {
    start = end-100;
   }

   for (long i=start;i<end;i++) {
    message = "ARTICLE " + i + "\r\n";
    Write(message);
    response = Response();
    if (response.Substring( 0, 3) == "423") {
     continue;
    }
    if (response.Substring( 0, 3) != "220") {
     throw new Exception(response);
    }

    string article = "";
    while (true) {
     response = Response();
     if (response == ".\r\n") {
      break;
     }

     if (response == ".\n") {
      break;
     }
        
     if (article.Length < 1024) {
      article += response;
     };
    }

    retval.Add(article);
   }

   return retval;
  }

  private string Response() {
   //System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
   System.Text.Encoding enc=Encoding.Default;
   byte []serverbuff = new Byte[1024];
   NetworkStream stream = GetStream();
   int count = 0;
   while (true) {
    byte []buff = new Byte[2];
    int bytes = stream.Read( buff, 0, 1 ); 
    if (bytes == 1) {
     serverbuff[count] = buff[0];
     count++;

     if (buff[0] == '\n') {
      break;
     }
    }
    else {
     break;
    };
   };

   string retval = enc.GetString( serverbuff, 0, count );
   System.Diagnostics.Debug.WriteLine("READ:" + retval);
   return retval;
  }

  private void Write(string message) {
   System.Text.ASCIIEncoding en = new System.Text.ASCIIEncoding() ;

   byte[] WriteBuffer = new byte[1024] ;
   WriteBuffer = en.GetBytes(message) ;

   NetworkStream stream = GetStream() ;
   stream.Write(WriteBuffer,0,WriteBuffer.Length);

   System.Diagnostics.Debug.WriteLine("WRITE:" + message);
   
   
  }

 }
 }
}

TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多