像这样的东西应该做的你,虽然我敢肯定,我错过一吨的异常情况处理和次要之类的东西,哦,正常关闭服务器。
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() ;
}
我认为你是在C#中寻找'StreamReader'。 – HenryZhang 2012-08-17 16:36:26