public void StreamToStream() { using (var server = new StreamSocket()) using (var client = new StreamSocket()) { var port = server.BindRandomPort("tcp://*"); client.Connect("tcp://127.0.0.1:" + port); byte[] clientId = client.Options.Identity; const string request = "GET /\r\n"; const string response = "HTTP/1.0 200 OK\r\n" + "Content-Type: text/plain\r\n" + "\r\n" + "Hello, World!"; client.SendMoreFrame(clientId).SendFrame(request); byte[] serverId = server.ReceiveFrameBytes(); Assert.AreEqual(request, server.ReceiveFrameString()); server.SendMoreFrame(serverId).SendFrame(response); CollectionAssert.AreEqual(clientId, client.ReceiveFrameBytes()); Assert.AreEqual(response, client.ReceiveFrameString()); } }
public void NativeSocket() { using (var streamServer = new StreamSocket()) using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { int port = streamServer.BindRandomPort("tcp://*"); socket.Connect("127.0.0.1", port); var buffer = new byte[] { 1 }; socket.Send(buffer); byte[] identity = streamServer.ReceiveFrameBytes(); byte[] message = streamServer.ReceiveFrameBytes(); Assert.AreEqual(buffer[0], message[0]); var socketSignal = new ManualResetEvent(false); using (var poller = new NetMQPoller()) { poller.Add(socket, s => { socket.Receive(buffer); socketSignal.Set(); // removing the socket poller.Remove(socket); }); poller.RunAsync(); // no message is waiting for the socket so it should fail Assert.IsFalse(socketSignal.WaitOne(100)); // sending a message back to the socket streamServer.SendMoreFrame(identity).SendFrame("a"); Assert.IsTrue(socketSignal.WaitOne(100)); socketSignal.Reset(); // sending a message back to the socket streamServer.SendMoreFrame(identity).SendFrame("a"); // we remove the native socket so it should fail Assert.IsFalse(socketSignal.WaitOne(100)); poller.Stop(); } } }