Use C # to interact with the NNTP server!
Last Update:2017-02-28
Source: Internet
Author: User
Server | interaction
Using System;
Using System.Text;
Using System.Net;
Using System.IO;
Using System.Net.Sockets;
Using System.Collections;
Using System.Diagnostics;
Namespace Nntptools {
<summary>
Summary description of the CLASS1.
</summary>
Class Debug {
<summary>
The main entry point for the application.
</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);
}
}
}
}