在netframework v2中,套接字使用Invoke(BeginRead)方法调用方法(示例ReceiveMsg),如下所示:

client = new TcpClient();
client.Connect(SERVERIP,PORTNO);
data = new byte [client.ReceiveBufferSize];
SendMessage("hello\n");

client.GetStream() . BeginRead(data,0,System.Convert.ToInt32(client.ReceiveBufferSize),ReceiveMsg,null);

  • 此方法的ReceiveMsg套接字是否始终处于“自动模式”,以便它将等待接收SocketServer广播的消息?

  • 或者正在使用System.Threading.Thread.Sleep()使ReceiveMsg方法始终处于活动状态,以便它在SocketServer广播消息时处于就绪模式以响应?

  • 如何在Netframework v4或4.5套接字中为此ReceiveMsg方法执行此操作,因为不再需要BeginRead() .

谢谢 .

下面是netframework v4中socket的代码:http://msdn.microsoft.com/en-us/library/hh202858(v=vs.92).aspx(对于WP mango / Wp8)

Client.Connect(); Client.Send(); Client.Receive();

public string Receive()
        {

            //-- receive the reply from server 

           string response = "Receiving Operation Timeout";

            // We are receiving over an established socket connection
            if (_socket != null)
            {
                // Create SocketAsyncEventArgs context object
                SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
                socketEventArg.RemoteEndPoint = _socket.RemoteEndPoint;

                // Setup the buffer to receive the data
                socketEventArg.SetBuffer(new Byte[MAX_BUFFER_SIZE], 0, MAX_BUFFER_SIZE);

                // Inline event handler for the Completed event.
                // Note: This even handler was implemented inline in order to make this method self-contained.
                socketEventArg.Completed += new EventHandler(delegate(object s, SocketAsyncEventArgs e)
                {
                    if (e.SocketError == SocketError.Success)
                    {
                        // Retrieve the data from the buffer

                        response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred);
                        response = response.Trim('\0');
                    }
                    else
                    {
                        response = e.SocketError.ToString();
                    }

                    _clientDone.Set();
                });

                // Sets the state of the event to nonsignaled, causing threads to block
                _clientDone.Reset();

                // Make an asynchronous Receive request over the socket
                _socket.ReceiveAsync(socketEventArg);

                // Block the UI thread for a maximum of TIMEOUT_MILLISECONDS seconds.
                // If no response comes back within this time then proceed
                _clientDone.WaitOne(TIMEOUT_MILLISECONDS);
            }
            else
            {
                response = "Socket is not initialized";
            }

            return response;
        }