2011-02-01 3 views
1

클라이언트 측 또한 스트림에 clientdata을을 writting 후 코딩비록 클라이언트는

TcpClient tcpclnt = new TcpClient("192.157.1.1", 8001); 
Stream stm = tcpclnt.GetStream(); 
byte[] bites = new byte[dataLength]; 
    // assigning values for bites 
stm.Write(clientdata, 0, clientdata.Length); 

서버 측

TcpListener listener = new TcpListener(IPAddress.Any, 8001); 
listener.Start(10); 
Socket soc = listener.AcceptSocket(); 
byte[] bites = new byte[1000]; 
int avail = soc.Available; 
int receivedBytesLen = soc.Receive(bites); 

코딩 왜 서버에서 사용할 수없는 네트워크 스트림의 데이터를 썼다 서버 쪽 soc.Available은 0입니다. 따라서 서버는 데이터를 읽을 수 없습니다. 문제가 무엇입니까?

답변

-2

stm.Write(...) 다음에 데이터를 네트워크에 플러시하도록 stm.Flush()을 추가하십시오.

+0

플러시가 구현되지 않았습니다. – CSharpie

2

데이터가 버퍼링됩니다. 클라이언트는 더 많은 것을 써야합니다. 또는 스트림을 닫습니다.

+0

스트림을 닫아야하지만'NetworkStream.Flush()'는 아무 것도하지 않고 나중에 사용하기 위해 예약되어 있습니다 (http://msdn.microsoft.com/en-us/library/system). net.sockets.networkstream.flush.aspx. – Despertar

2

NetworkStream.Flush()는 MSDN에 따라 실제로 .NET 4.0 '아직'구현되지 : 스트림에서

데이터 플러시. 이 메서드는 나중에 사용하기 위해 예약되어 있습니다.

아마도 nagle algorithm에 의해 문제가 발생했을 수 있으며, 정체를 줄이기 위해 소량의 데이터를 보내지 않도록 방지 할 수 있습니다. 당신은 당신하여 TcpClient 객체에서 다음 속성을 설정하여 그것을 해제 시도 할 수 :

tcpClient.NoDelay = true; 
tcpClient.Client.NoDelay = true; 

또한 networkComms.net를 체크 아웃 당신이 가진 문제를 유지하는 경우 솔루션을 사용하기 준비가되어있다.