views:

114

answers:

2

how to translate this to C#

import java.io.*; 
import java.net.*; 

 class SimpleServer 
 { 
private static SimpleServer server; 
ServerSocket socket; 
Socket incoming; 
BufferedReader readerIn; 
PrintStream printOut; 

public static void main(String[] args) 
{ 
    int port = 8080; 

    try 
    { 
        port = Integer.parseInt(args[0]); 
    } 
    catch (ArrayIndexOutOfBoundsException e) 
    { 
        // Catch exception and keep going. 
    } 

    server = new SimpleServer(port); 
} 

private SimpleServer(int port) 
{ 
    System.out.println(">> Starting SimpleServer"); 
    try 
    { 
        socket = new ServerSocket(port); 
        incoming = socket.accept(); 
        readerIn = new BufferedReader(new InputStreamReader(incoming.getInputStream())); 
        printOut = new PrintStream(incoming.getOutputStream()); 
        printOut.println("Enter EXIT to exit.\r"); 
        out("Enter EXIT to exit.\r"); 
        boolean done = false; 
        while (!done) 
        { 
            String str = readerIn.readLine(); 
            if (str == null) 
            { 
                done = true; 
            } 
            else 
            { 
                out("Echo: " + str + "\r"); 
                if(str.trim().equals("EXIT")) 
                { 
                    done = true; 
                } 
            } 
            incoming.close(); 
        } 
    } 
    catch (Exception e) 
    { 
        System.out.println(e); 
    } 
} 

private void out(String str) 
{ 
    printOut.println(str); 
    System.out.println(str); 
} 
}
+1  A: 

Take a look at the TCPListener sample on MSDN. It's very similar to what you're trying to do above, and porting the few differences over should be easy.

Justin Grant
+3  A: 

Something like this should work:

using System;
using System.IO;
using System.Net.Sockets;
using System.Text;

namespace Server
{
    internal class SimpleServer
    {
        private static SimpleServer server;
        private readonly TcpListener socket;

        private SimpleServer(int port)
        {
            Console.WriteLine(">> Starting SimpleServer");
            socket = new TcpListener(port);
            socket.Start(); 
        }

        private void DoJob()
        {
            try
            {
                bool done = false;
                while (!done)
                {
                    TcpClient client = socket.AcceptTcpClient();
                    NetworkStream stream = client.GetStream();
                    var reader = new StreamReader(stream, Encoding.UTF8);
                    String str = reader.ReadLine();
                    if (str == null)
                    {
                        done = true;
                    }
                    else
                    {
                        printOut(str, stream);
                        if (str.Trim() == "EXIT")
                        {
                            done = true;
                        }
                    }
                    client.Close();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }


        public static void main(String[] args)
        {
            int port = 8080;

            try
            {
                port = Int32.Parse(args[0]);
            }
            catch (Exception e)
            {
                // Catch exception and keep going. 
            }

            server = new SimpleServer(port);
            server.DoJob();
        }

        private void printOut(String str, Stream stream)
        {
            byte[] bytes = Encoding.UTF8.GetBytes("Echo: " + str + "\r\n");
            stream.Write(bytes, 0, bytes.Length);
            Console.WriteLine(str);
        }
    }
}

edit: but be careful with encoding

ALOR
+1 for warning about the encoding.
Aaron Digulla