echoserver.monkey2 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #rem
  2. Quick quide to writing TCP client/server apps:
  3. * Server:
  4. 1) Use Socket.Listen to create the server socket.
  5. 2) Use Socket.Accept in a loop to accept new clients.
  6. 3) Use Socket.Send and Socket.Receive to communicate with clients.
  7. * Client:
  8. 1) Use Socket.Connect to connect to the listening server (must already be running!) and create a client socket.
  9. 2) Use Socket.Send and Socket.Receive to communicate with the server.
  10. #end
  11. #Import "<mojox>"
  12. #Import "<mojo>"
  13. #Import "<std>"
  14. Using mojox..
  15. Using mojo..
  16. Using std..
  17. Const HOST:="localhost"
  18. Const PORT:=40122
  19. Class MyWindow Extends Window
  20. Method New()
  21. New Fiber( Server )
  22. New Fiber( Client )
  23. End
  24. Method Server()
  25. Local server:=Socket.Listen( PORT )
  26. If Not server print "Server: Failed to create server" ; Return
  27. Print "Server @"+server.Address+" listening"
  28. server.SetOption( "SO_REUSEADDR",1 )
  29. server.SetOption( "TCP_NODELAY",1 )
  30. Repeat
  31. Local socket:=server.Accept()
  32. If Not socket Exit
  33. Print "Server accepted client @"+socket.PeerAddress
  34. Print "Server Connected="+Int( socket.Connected )
  35. Local stream:=New SocketStream( socket )
  36. New Fiber( Lambda()
  37. While Not stream.Eof
  38. Local line:=stream.ReadSizedString()
  39. If Not line Print "empty line!" ; Continue
  40. stream.WriteSizedString( line )
  41. Wend
  42. Print "Sever Eof"
  43. stream.Close()
  44. End )
  45. Forever
  46. Print "Server:Bye"
  47. server.Close()
  48. End
  49. Method Client()
  50. Fiber.Sleep( .5 )
  51. Local client:=Socket.Connect( HOST,PORT,SocketType.Stream )
  52. If Not client Print "Client: Couldn't connect to server" ; Return
  53. Print "Client @"+client.Address+" connected to server @"+client.PeerAddress
  54. Print "Client Connected="+Int(client.Connected)
  55. client.SetOption( "TCP_NODELAY",1 )
  56. Local stream:=New SocketStream( client )
  57. For Local i:=0 Until 100
  58. stream.WriteSizedString( "This is a number:"+i )
  59. Print "Reply:"+stream.ReadSizedString()
  60. Next
  61. Print "Client:Bye"
  62. stream.Close()
  63. End
  64. Method OnRender( canvas:Canvas ) Override
  65. Global ticks:=0
  66. ticks+=1
  67. canvas.DrawText( ticks,0,0 )
  68. End
  69. End
  70. Function Main()
  71. New AppInstance
  72. New MyWindow
  73. App.Run()
  74. End