(* File mosml/src/dynlibs/msocket/testserver.sml This is a collect of socket examples, not a systematic test suite. *)val inetaddr = "127.0.0.1"val portno = 3000;val _ = app load ["FileSys", "Socket", "Byte", "Int"];fun buff v = { buf=v, ofs=0, size=NONE}fun inetserver ipno port = let val sock = Socket.inetStream () val addr = Socket.inetAddr ipno port val _ = Socket.bind(sock, addr) val _ = Socket.listen(sock, 150); val c = ref 7; in ((while !c > 0 do let val (n,a) = Socket.accept sock val vec = Socket.recvVec(n,20) (* Reverse the bytes in the vector *) val ls = Word8Vector.foldl op:: nil vec val s = String.implode (map Byte.byteToChar ls) in Socket.sendVec(n, buff(Byte.stringToBytes s)); print ("Server: sent response " ^ s ^ " to client\n"); Socket.close n; c := !c - 1 end) handle Interrupt => print "Server terminated by user.\n\n"); Socket.close sock end val _ = print ("\nSimple client/server example with sockets\n\ \-----------------------------------------\n\ \Starting example inetserver on IP address " ^ inetaddr ^ " port " ^ Int.toString portno ^ "\n\nIn another terminal, start a mosml session by typing\n\ \ mosml testclient.sml\n\ \and in that session, execute e.g.\n\ \ val f = inetclient \"" ^ inetaddr ^ "\" " ^ Int.toString portno ^ ";\n\ \ f \"Test\";\n\ \ f \"madam, I'm adam\";\n\n\ \or similar\n\n")val _ = inetserver inetaddr portno;
(* File mosml/src/dynlibs/msocket/testserver.sml
This is a collect of socket examples, not a systematic test suite.
*)
val inetaddr = "127.0.0.1"
val portno = 3000;
val _ = app load ["FileSys", "Socket", "Byte", "Int"];
fun buff v = { buf=v, ofs=0, size=NONE}
fun inetserver ipno port =
let val sock = Socket.inetStream ()
val addr = Socket.inetAddr ipno port
val _ = Socket.bind(sock, addr)
val _ = Socket.listen(sock, 150);
val c = ref 7;
in
((while !c > 0 do
let
val (n,a) = Socket.accept sock
val vec = Socket.recvVec(n,20)
(* Reverse the bytes in the vector *)
val ls = Word8Vector.foldl op:: nil vec
val s = String.implode (map Byte.byteToChar ls)
in
Socket.sendVec(n, buff(Byte.stringToBytes s));
print ("Server: sent response " ^ s ^ " to client\n");
Socket.close n;
c := !c - 1
end)
handle Interrupt => print "Server terminated by user.\n\n");
Socket.close sock
end
val _ =
print
("\nSimple client/server example with sockets\n\
\-----------------------------------------\n\
\Starting example inetserver on IP address "
^ inetaddr ^ " port " ^ Int.toString portno
^ "\n\nIn another terminal, start a mosml session by typing\n\
\ mosml testclient.sml\n\
\and in that session, execute e.g.\n\
\ val f = inetclient \"" ^ inetaddr ^ "\" " ^ Int.toString portno
^ ";\n\
\ f \"Test\";\n\
\ f \"madam, I'm adam\";\n\n\
\or similar\n\n")
val _ = inetserver inetaddr portno;