How to create and use a TCP socket client application for Windows Phone [msdn]

Source: Internet
Author: User

1. Connect to the TCP socket server

Use the System. Net. Sockets API to create a socket and connect to the server. For clarity, the call to the System. Net. Sockets API is encapsulated in the SocketClient class.

Define the header (use _ socket variable storage)SocketObject. The _ clientDone variable is a ManualResetEvent used to coordinate asynchronous calls called through the Sockets API ):

// Cached Socket object that will be used by each call for the lifetime of this class        Socket _socket = null;        // Signaling object used to notify when an asynchronous operation is completed        static ManualResetEvent _clientDone = new ManualResetEvent(false);        // Define a timeout in milliseconds for each asynchronous call. If a response is not received within this         // timeout period, the call is aborted.        const int TIMEOUT_MILLISECONDS = 5000;        // The maximum size of the data buffer to use with the asynchronous socket methods        const int MAX_BUFFER_SIZE = 2048;

In SocketClient. cs, add the following method to create a TCP socket and send an asynchronous connection request to the server. The response to this operation will be processed by the inline callback.

  public string Connect(string hostName, int portNumber)        {            string result = string.Empty;            DnsEndPoint hostEntry = new DnsEndPoint(hostName, portNumber);            _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);                        // Create a SocketAsyncEventArgs object to be used in the connection request            SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();            socketEventArg.RemoteEndPoint = hostEntry;            socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)            {                result = e.SocketError.ToString();                _clientDone.Set();            });            _clientDone.Reset();            _socket.ConnectAsync(socketEventArg);
_clientDone.WaitOne(TIMEOUT_MILLISECONDS); return result; }

 

2. send data to the TCP socket server

public string Send(string data)        {            string response = "Operation Timeout";            // We are re-using the _socket object that was initialized in the Connect method            if (_socket != null)            {                // Create SocketAsyncEventArgs context object                SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();                // Set properties on context object                socketEventArg.RemoteEndPoint = _socket.RemoteEndPoint;                socketEventArg.UserToken = null;                // Inline event handler for the Completed event.                // Note: This event handler was implemented inline in order to make this method self-contained.                socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)                {                    response = e.SocketError.ToString();                    // Unblock the UI thread                    _clientDone.Set();                });                // Add the data to be sent into the buffer                byte[] payload = Encoding.UTF8.GetBytes(data);                socketEventArg.SetBuffer(payload, 0, payload.Length);                // Sets the state of the event to nonsignaled, causing threads to block                _clientDone.Reset();                // Make an asynchronous Send request over the socket                _socket.SendAsync(socketEventArg);                // Block the UI thread for a maximum of TIMEOUT_MILLISECONDS milliseconds.                // If no response comes back within this time then proceed                _clientDone.WaitOne(TIMEOUT_MILLISECONDS);            }            else            {                response = "Socket is not initialized";            }            return response;        }

3. receive data from the TCP socket server

   public string Receive()        {            string response = "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<SocketAsyncEventArgs>(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 milliseconds.                // If no response comes back within this time then proceed                _clientDone.WaitOne(TIMEOUT_MILLISECONDS);            }            else            {                response = "Socket is not initialized";            }            return response;        }        /// <summary>        /// Closes the Socket connection and releases all associated resources        /// </summary>        public void Close()        {            if (_socket != null)            {                _socket.Close();            }        }

 

Related Article

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.