#light open System.Net open System.Net.Sockets open System.Text open System.Threading let rec process (client: TcpClient) (stream: NetworkStream) = let bytes = Array.create 100 0uy stream.Read(bytes, 0, 100) |> ignore let data = Encoding.ASCII.GetString(bytes) let res = try int_of_string data |> (fun x -> x * x) |> sprintf "%d\n" with _ -> "Invalid number.\n" stream.Write(Encoding.ASCII.GetBytes(res), 0, res.Length); process client stream let run client () = try process client (client.GetStream()) with _ -> client.Close() printf "Client logged out\n" let () = try let server = TcpListener(IPAddress.Parse("127.0.0.1"), 3000) server.Start() while true do let client = server.AcceptTcpClient() printf "Client logged in\n" Thread(ThreadStart(run client)).Start() with e -> printf "Error: %s\n" e.Message