Чтение из сокета в C #

я пытаюсь читать текст ASCII ответ от tcp открыть потоковый сокет

вот что я придумал до сих пор. Я хочу знать, что это лучший способ для этого, включает в себя обработку ошибок. Я должен также быть проверка SocketError после Получения вызова в цикле do?

IPEndPoint ep = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 9000);
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.SendTimeout = 5000;
sock.ReceiveTimeout = 5000;
if (null != sock)
{
	try
	{
		sock.Connect(ep);
		if (sock.Connected)
		{

			// Blocks until send returns.
			int bytesSent = sock.Send(buffer);
			Console.WriteLine("Sent {0} bytes.", bytesSent);
			//get the first 4 bytes, should be the lenngth of the rest of the response.
			byte[] response = new byte[4];
			int bytesRec = sock.Receive(response);
			int totalBytesRec = 0;
			if (4 == bytesRec)
			{
				int len = BitConverter.ToInt32(response, 0);
				response = new byte[len];
				Console.WriteLine("Trying to get {0} bytes.", len);
				bytesRec = 0;

				do
				{
					bytesRec = sock.Receive(response);
					totalBytesRec += bytesRec;
					forecast += Encoding.ASCII.GetString(response, 0, bytesRec);
				} while (totalBytesRec < len && bytesRec > 0);

				if (totalBytesRec != len)
					throw new Exception("The total bytes recieved from manager did not equal the expected bytes");
			}
			else
				throw new Exception("Unable to get the response size from the manager");


			Console.WriteLine("Received {0} bytes.", totalBytesRec);
		}

	}
	catch (SocketException ex)
	{
		Console.WriteLine("{0} Error code: {1}.", ex.Message, ex.ErrorCode);
	}
	catch (Exception ex)
	{
		Console.WriteLine(ex.Message);
	}
	finally
	{
		sock.Shutdown(SocketShutdown.Both);
		sock.Close();
	}
}

Найдено 1 ответ:

Reading from a socket in C#

http://stackoverflow.com/questions/47533/reading-from-a-socket-in-c-sharp

Посмотреть решение →