我在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
}
如果您需要完整代码here,请粘贴。
我想把它改写成C#
但我不知道哪个等同于BufferReader。 我有套接字,我想从套接字InputStream(使用UTF8)
读取感谢。
答案 0 :(得分: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() ;
}
}
}
}
如果要缓冲流,只需使用NetworkStream
装饰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() ;
}
答案 1 :(得分:1)
这取决于你想要什么。 BufferedReader缓冲来自另一个读取器的数据。如果您只想要缓冲读取,则可以使用类似StreamReader的内容,具体取决于您希望如何读取数据。
答案 2 :(得分:1)
以下内容具有可比性。
using(StreamReader reader = new StreamReader(Socket.GetStream(), Encoding.UTF8)) {
while(reader.Peek() >= 0) {
Console.WriteLine(reader.ReadLine()); // or something...
}
}