Translate

Freitag, 23. Oktober 2015

Socket-Receive data byte per byte in C#


public string SendMessage(string serverAddress, int port, string message)
        {
            try
            {
                // Establish the remote endpoint for the socket.
                IPHostEntry ipHostInfo = Dns.Resolve(serverAddress);
                IPAddress ipAddress = ipHostInfo.AddressList[0];
                IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);

                // Create a TCP/IP  socket.
                Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                // Connect the socket to the remote endpoint. Catch any errors.
                sender.Connect(remoteEP);

                // Encode the data string into a byte array.
                byte[] data = Encoding.ASCII.GetBytes(message);

                // Send the data through the socket.
                int bytesSent = sender.Send(data);

                // String to store the response ASCII representation.
                string responseData = "";

                // Buffer to store the response bytes.
                data = new byte[262144]; //2^18
                byte [] onlyOneByte = new byte[1];

                // Receive the response from the remote device.
                int bytesRec = 0;
                do
                {
                    sender.Receive(onlyOneByte);
                    data[bytesRec] = onlyOneByte[0];
                    bytesRec++;
                }
                while (onlyOneByte[0]!=(char)3);
                //While not <ETX> reached, get new data

                responseData =  System.Text.Encoding.ASCII.GetString(data, 0, bytesRec);

                // Release the socket.
                sender.Shutdown(SocketShutdown.Both);
                sender.Close();
                return responseData;
            }
            catch (Exception e)
            {
                return "";
            }
        }


Keine Kommentare:

Kommentar veröffentlichen