TcpClient가 네트워크 응용 프로그램에서 소켓 작업을 단순화한다는 인상하에있었습니다.데이터 읽기 TcpClient가 소켓보다 열등하다
그러나 TcpClient는 기본 소켓에서 읽어야하는 데이터의 양을 알아야합니다. TcpClient.GetStream (..)처럼 보입니다 .Read (..)는 지정된 바이트 수를 읽는 Socket.Receive (..)를 호출합니다.
TcpClient는 NetworkStream을 노출하므로 처리하기가 매우 어려울 수 있습니다. 종료 문자열과 신뢰할 수없는 DataAvailable 속성과 같은 항목은 알 수없는 TCP "패킷"을 읽는 것을 복잡하게 만듭니다.
Socket.ReceiveFrom (..)을 사용하면 훨씬 더 "패킷"지향적 인 것처럼 보입니다.
나는 보통 핸드 셰이크 등을 결합하고하여 TcpClient를 사용하여 읽기 나는
Socket socket = _tcpClient.Client;
byte[] buffer = new byte[1000];
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint senderRemote = sender;
int length = socket.ReceiveFrom(buffer, ref senderRemote);
string replyString = Encoding.ASCII.GetString(buffer, 0, length);
return replyString;
버퍼 초기화 일부 오버 헤드를 사용하지만, 그것은는 NetworkStream에서 한 번에 한 바이트를 읽기, 찾고 친다 종료 문자 또는 문자열.
TcpClient가 더 나은 방법으로 데이터 읽기를 처리하지 않는다는 것이 약간 이상하지 않습니까? 즉 소켓이하는 방식입니까?