2012-08-17 108 views
2

的我有一個代碼在Java中.NET相當於Java的BufferedReader中

public void read() throws IOException { 
    BufferedReader in = new BufferedReader(new InputStreamReader(this.socket.getInputStream(), "UTF8")); 
    String requestURL = null; 
    Vector property = new Vector(); 
    String line; 
     //MORE OF CODE 
} 

如果您需要完整的代碼here是糊。

我想重寫到C#

但我不知道這相當於BufferReader。 我有套接字,並且我想從套接字InputStream讀取(使用UTF8)

謝謝。

+4

我認爲你是在C#中尋找'StreamReader'。 – HenryZhang 2012-08-17 16:36:26

回答

1

這取決於你想要什麼。 BufferedReader從緩衝另一個閱讀器的數據。如果你只是想緩衝讀取,你可以根據你想要讀取數據的方式使用StreamReader之類的東西。

1

像下面這樣的東西是可比的。

using(StreamReader reader = new StreamReader(Socket.GetStream(), Encoding.UTF8)) { 
    while(reader.Peek() >= 0) { 
     Console.WriteLine(reader.ReadLine()); // or something... 
    } 
} 
+0

是的,但從套接字我沒有GetStream。 (以「G」開頭 - GetHashCode,GetSocketOption,GetType)。 – 2012-08-17 17:02:09

+0

@WiktorTkaczyński,請看看'TcpClient'和'TcpListener'類:它們有'GetStream()'方法。 – 2013-02-07 19:10:15

5

像這樣的東西應該做的你,雖然我敢肯定,我錯過一噸的異常情況處理和次要之類的東西,哦,正常關閉服務器。

static void Main(string[] args) 
{ 
    string  localMachineName = Dns.GetHostName() ; 
    IPHostEntry localMachineInfo = Dns.GetHostEntry(localMachineName) ; 
    IPAddress localMachineAddress = localMachineInfo.AddressList[0] ; 
    IPEndPoint localEndPoint  = new IPEndPoint(localMachineAddress , PORT_NUMBER) ; 

    using (Socket server = new Socket(localEndPoint.AddressFamily , SocketType.Stream , ProtocolType.Tcp)) 
    { 
    server.Bind( localEndPoint     ) ; 
    server.Listen(PENDING_CONNECTIONS_QUEUE_LENGTH) ; 

    while (true) 
    { 
     using (Socket  connection  = server.Accept()          ) 
     using (NetworkStream connectionStream = new NetworkStream(connection  , FileAccess.Read , false)) 
     using (TextReader connectionReader = new StreamReader( connectionStream , Encoding.UTF8 )) 
     { 
     IPEndPoint remoteEndpoint = (IPEndPoint) connection.RemoteEndPoint ; 

     string line ; 
     while (null != (line=connectionReader.ReadLine())) 
     { 
      line = line.Trim() ; 
      Console.WriteLine("Client says: {0}" , line) ; 
      if (string.Equals("exit"  , line , StringComparison.InvariantCultureIgnoreCase)) break ; 
      if (string.Equals("quit"  , line , StringComparison.InvariantCultureIgnoreCase)) break ; 
      if (string.Equals("goodbye" , line , StringComparison.InvariantCultureIgnoreCase)) break ; 
      if (string.Equals("good-bye" , line , StringComparison.InvariantCultureIgnoreCase)) break ; 
     } 

     connection.Shutdown(SocketShutdown.Both) ; 
     connection.Close() ; 
     } 
    } 

    } 

} 

如果你希望緩衝流,只需用BufferedStream裝飾NetworkStream實例:

using (Socket  connection  = server.Accept()               ) 
using (Stream  connectionStream = new NetworkStream(connection  , FileAccess.Read , false   )) 
using (TextReader connectionReader = new StreamReader(new BufferedStream(connectionStream) , Encoding.UTF8)) 
{ 
    IPEndPoint remoteEndpoint = (IPEndPoint) connection.RemoteEndPoint ; 

    string line ; 
    while (null != (line=connectionReader.ReadLine())) 
    { 
    line = line.Trim() ; 
    Console.WriteLine("Client says: {0}" , line) ; 
    if (string.Equals("exit"  , line , StringComparison.InvariantCultureIgnoreCase)) break ; 
    if (string.Equals("quit"  , line , StringComparison.InvariantCultureIgnoreCase)) break ; 
    if (string.Equals("goodbye" , line , StringComparison.InvariantCultureIgnoreCase)) break ; 
    if (string.Equals("good-bye" , line , StringComparison.InvariantCultureIgnoreCase)) break ; 
    } 

    connection.Shutdown(SocketShutdown.Both) ; 
    connection.Close() ; 
}