# [.net] Strange Socket issue

## Recommended Posts

Woltan    122
Dear Forum, I ran into a strange phenomenon. Maybe you can help me, and if you do, I'd very much appreciate it ;) Here we go: I have a non .net server running, that occasionally sends out TCP packages with a size of roughly 500 Bytes. On the client side (where my problem occurs) I have a System.Windows.Forms.Timer timer, that ticks every 10ms. In that tick I check if something was sent by the server and needs to be processed. I check that with the static socket.select function. Everything seems to be working just fine until about 1500 Bytes. From there on my receive buffer is somewhat corrupt. It is not that all data is rubbish, but there are some errors in it. First I was guessing that the MTU has something to do with it but then I changed the tick frequency of the timer from 10 to 20 and the problem was resolved.... until the server sent about 4500 Bytes. From there on the buffer again was corrupt. Here again what happens on the client side in a few source snippets:
//Somewhere before
ConnectionTimer = new Timer();
ConnectionTimer.Tick += new EventHandler(ConnectionTimer_Tick);
ConnectionTimer.Interval = 10;
ConnectionTimer.Start();

void Recv()
{
List<Socket> lTemp = new List<Socket>();
Socket.Select(lTemp, null, null, 5);
if(lTemp.Contains(TCP))
{
InterpreteBuffer(RecvBuffer, iRecv);
}
}


I hope you can help me with a link, tipp, suggestion,..., anything Regards Woltan

##### Share on other sites
SiCrane    11839
TCP is a stream protocol, which means, among other things, that a single receive call will not necessarily retrieve the same data as a single send call from the other side. For example, if the sender sends "Hello" and "world" as two different sends, the receiver could receive "HelloWorld" as a single receive or "Hell", "oWo" and "rld" as three different receive calls. Since your code only contains a single Receive() call, it looks like you don't take this into account.