2015-01-02 79 views
0

我正在嘗試編寫身份識別服務器來處理來自irc服務器的身份協議請求,該服務器正在爲irc客戶端進行編程。問題是我嘗試在屏幕上打印我收到的內容,但沒有打印。我沒有收到錯誤代碼。不識別服務器端口113上的標識

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Net; 
using System.Net.Sockets; 

namespace ConnectIRC 
{ 
    class IdentityClass 
    { 
     private const int bufSize = 32; 
     public void IdentityRequest() { 
      TcpListener listener = null; 
      int port = 113; 

      IPEndPoint hostInfo = new IPEndPoint(IPAddress.Any, 113); 
      listener = new TcpListener(hostInfo); 
      listener.Start(); 

      byte[] rcvBuffer = new byte[bufSize]; 
      int rec; 

      for (; ;) 
      { 
       TcpClient client = null; 
       NetworkStream netStream = null; 

       client = listener.AcceptTcpClient(); 
       if (listener.Pending()) 
       { 
        Console.WriteLine("Connection was made"); 
       } 
       netStream = client.GetStream(); 
       //byte[] rcvBuffer = new byte[bufSize]; 
       rec = netStream.Read(rcvBuffer, 0, rcvBuffer.Length); 
       Array.Resize(ref rcvBuffer, rec); 
       Console.WriteLine(Encoding.ASCII.GetString(rcvBuffer)); 
       netStream.Close(); 
       client.Close(); 
      } 



     } 

    } 
} 

回答

0

這是一個非常基本實現的ident服務器

顯然只接受一個連接,並關閉

注意你需要有一個端口,通過路由器映射這個工作的

public class Ident 
{ 
    private readonly TcpListener _listener; 
    private readonly string _userId; 

    public Ident(string userId) 
    { 
     _userId = userId; 
     _listener = new TcpListener(IPAddress.Any, 113); 
    } 

    public void Start() 
    { 
     Console.WriteLine("Ident started"); 
     _listener.Start(); 
     var client = _listener.AcceptTcpClient(); 
     _listener.Stop(); 
     Console.WriteLine("Ident got a connection"); 
     using (var s = client.GetStream()) 
     { 
     var reader = new StreamReader(s); 
     var str = reader.ReadLine(); 
     var writer = new StreamWriter(s); 
     Console.WriteLine("Ident got: " + str + ", sending reply"); 
     writer.WriteLine(str + " : USERID : UNIX : " + _userId); 
     writer.Flush(); 
     Console.WriteLine("Ident sent reply"); 
     } 
     Console.WriteLine("Ident server exiting"); 

    } 
}