I have that code in Java
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
}
If You need full code here is paste.
I want rewrite that to C#
But i don't know which is equivalent to BufferReader. I have socket, and i want read from socket InputStream (with UTF8)
Thanks.
Something like this ought to do you, though I'm sure I'm missing a ton of exceptional condition handling and minor things like, oh, graceful server shutdown.
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() ;
}
}
}
}
If you want to buffer the stream, just decorate the NetworkStream
instance with a BufferedStream
:
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() ;
}
It depends on what you want. BufferedReader buffers the data from another reader. If you just want buffered reads, you can use something like StreamReader depending how you want to read data.
Something like the following would be comparable.
using(StreamReader reader = new StreamReader(Socket.GetStream(), Encoding.UTF8)) {
while(reader.Peek() >= 0) {
Console.WriteLine(reader.ReadLine()); // or something...
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.