Skip to content

Instantly share code, notes, and snippets.

@rane-hs
Created November 22, 2011 09:44
Show Gist options
  • Save rane-hs/1385316 to your computer and use it in GitHub Desktop.
Save rane-hs/1385316 to your computer and use it in GitHub Desktop.
tcpのサーバーを書きたかった
//F# の詳細 (http://fsharp.net)
open System.Net.Sockets;
open System.Net;
type TcpServer (port:int, ip:string, read_memory_func) =
let port_ = port;
let ip_ = ip;
let functor_ = read_memory_func;
let mutable tcpServer:System.Net.Sockets.TcpListener = null;
//pusher
let rec recieveFrame' (tcpStream : System.Net.Sockets.NetworkStream) (getMemory : System.IO.MemoryStream) : System.IO.MemoryStream =
let byteArray = Array.create<byte> 256 0b0uy;
let resSize = tcpStream.Read(byteArray, 0, byteArray.Length);
//push
match resSize with
| 0 -> getMemory
| _ ->
getMemory.Write(byteArray, 0, byteArray.Length);
recieveFrame' tcpStream getMemory;
let recieveFrame (tcpStream : System.Net.Sockets.NetworkStream) : System.IO.MemoryStream =
recieveFrame' tcpStream (new System.IO.MemoryStream());
//receiver
let rec recieveStream' (tcpStream : System.Net.Sockets.NetworkStream) (getMemory : System.IO.MemoryStream) : System.IO.MemoryStream =
//buffer
//let tcpBuffer = Array.create 256 byte ;
let recvLength : int = 0;
//proc
let getMemory' = recieveFrame tcpStream
getMemory'.WriteTo(getMemory);
//cont?
match tcpStream.DataAvailable with
| false -> getMemory
| _ -> recieveStream' tcpStream getMemory
let rec recieveStream (tcpStream : System.Net.Sockets.NetworkStream) : System.IO.MemoryStream =
recieveStream' tcpStream (new System.IO.MemoryStream());
member this.listen() =
let host = Dns.GetHostAddresses(ip_).[0];
tcpServer <- new TcpListener(host, port);
tcpServer.Start()
member this.connect() =
tcpServer.AcceptTcpClient()
|> fun x -> x.GetStream()
|> fun x-> do
//make buffer
recieveStream x |> functor_
//受け取ったフレームを表示する(さっさとかけ
let memoryPrinter (src:System.IO.MemoryStream) : unit=
()
let tcpServerTest = new TcpServer(ip="localhost", port=5001, read_memory_func=memoryPrinter);
tcpServerTest.listen();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment