Created
November 22, 2011 09:44
-
-
Save rane-hs/1385316 to your computer and use it in GitHub Desktop.
tcpのサーバーを書きたかった
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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