Why Is Socket.BeginReceive Losing Packets From UDP
Sep 25, 2010
The following code waits for data over UDP. I have a test function that sends 1000 packets (datagrams?) of 500 bytes each. Each time I run the test function, the receiver gets only the first few dozen packets but drops the rest. I looked at the incoming network data using Wireshark and I see all 1000 packets are actually received, but just don't make it to may app's code.[code]If I add a small delay after each call to Send, more packets make it through; however since Wireshark says that they were all received anyways, it seems that the problem is in my receive code. I should mention that UdpListen is running on a separate thread.Any idea why I am dropping packets? I also tried UdpClient. BeginReceive/ EndReceive but had the same problem. A second issue that bothers me is the global nature of the receive buffer when using Sockets and I am not sure if I don't process incoming packets quickly enough that the buffer will be overwritten.
Based on the various, somewhat conflicting suggestions from replies to this and other posts, I made some changes to my code. Thanks to all who chimed in various bits; I now get all my packets from dial-up to Fast Ethernet. As you can see, it was my code at fault and not the fact that UDP drops packets (in fact I have not seen more than a tiny percentage of packets being dropped or out of order since my fixes). Differences:
1) Replaced BeginReceive()/EndReceive() with BeginReceiveFrom()/EndReceiveFrom(). By itself this had no notible effect though.
2) Chaining BeginReceiveFrom() calls instead of waiting for the async handle to set. Not sure if any benefit here.
3) Explicitly set the Socket.ReceiveBufferSize to 500000 which is enough for 1 second worth of my data at Fast Ethernet speed. Turns out this is a different buffer than the one passed to BeginReceiveFrom(). This had the biggest benefit.
4) I also modified my send routine to wait a couple of ms after having sent a certain number of bytes to throttle based on expected bandwidth. This had a big benefit for my receiving code even though Wireshark said all my data still made it across even without this delay.
I did NOT end up using a separate processing thread because, as I understand it, each call to BeginReceiveFrom will invoke my callback on a new worker thread. This means that I can have more than one callback running at the same time. It also means that once I call BeginReceiveFrom I have time to do my stuff (as long as I don't take too long and exaust the available worker threads).[code]What is not shown above is the error handling and dealing with UDP data being out of order or missing.I think this handles my issue, but if anybody still sees anything wrong with the above (or something I could do better) I would love to hear about it.
View 5 Replies
ADVERTISEMENT
Sep 15, 2009
The MSDN Documentation in question can be found here:[URL].. It offers the following code snippet example:
[Code]...
View 2 Replies
Nov 2, 2009
i try to transfer packets from the PC to the Mobile phone~ my PC is act as a Server and Mobile as a Client. My Mobile is successfully connect to my PC, but when i try to pass a packets from Mobile, it went failed without any error. The Server didn't receive any packets from Mobile. i had test my code on PC to PC and it's work fine. Anyone have this kind of experience?
View 3 Replies
Jul 4, 2011
I'm writing a program which uses sockets, Now the issue I'm having is, If the packet received is over a certain size, the socket then fails to receive anymore packets/data after it.
View 3 Replies
Jul 6, 2011
I am using the following code to receive data from a Public Address Controller.the programme sends data...waits for a reply....send more data...waits for a reply..etc.
[Code]...
is there some way of cancelling the BeginReceive after a delay so that the programme can carry on and inform the user that something is wrong and terminate gracefully?
View 8 Replies
Nov 2, 2009
This is the MSDN example for handling the BeginReceive callback.BeginReceive is called over and over until no more data is available, i.e. EndReceive returns 0. However I am finding that the callback is only fired when there is data available.
I'm guessing that the example is simply wrong or refers to expected behaviour in a previous version of .NET, although it says it is for 3.5.So how do I ensure I have received all of the available data?
[Code]...
View 3 Replies
May 21, 2011
I wrote a Socket Client which will send the Socket Server some data and get some response from Server. This process will be running once in every 2 seconds.
Now what I need to know is How we can identify the connection lost between Server and Client?
I need this to be implemented in the Client side. If there is no connection then Client should automatically close the connection. Once the connection with the server is available in the next attempt it should connect automatically.
View 1 Replies
Oct 15, 2011
Below is my code, but when i send the message thru client socket i receive Specified argument was out of the range of valid values. Parameter name: size
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim serverStream As NetworkStream = clientSocket.GetStream()
Dim outStream As Byte() = _
System.Text.Encoding.ASCII.GetBytes("0800822000000000000004000000000000000920092126012345001")
[CODE]...
View 1 Replies
May 13, 2009
I am writing a program that talks back and forth with an external machine through UDP/IP. I have figured out how to talk to the machine, bu now I need to know how to read the machine's response. I am using the following code:
Dim receiveBytes As [Byte]() = udpClient.Receive(RemoteIpEndPoint)
Dim returnData As String = Encoding.ASCII.GetString(receiveBytes)
TextBox1.Text = returnData
When I break the code down and read receiveBytes, it comes through exactly the way I want it. It is falling apart when it gets encoded and put into a textbox. It just comes out as a "?".
View 11 Replies
Jun 19, 2009
I am trying to receive about 900 packets coming from around 900 different ip's. But for some reason I can't seem to capture them all. The same code in C++ seems to work fine, but when I try to do it and run it through the parser it seems that I only get about 150 - 300 of these packets each time I ask for them.
[Code]....
View 3 Replies
Oct 3, 2010
Does anyone know of a good example of TCP, in C# or VB.NET?
The problem I have with the majority i've found is that they send data once, receive data once, and end. This isn't a workable example. Even MSDN's example does this.
My main question:
Every example reads incoming data into a buffer (byte array), usually 512 bytes. If two packets are received in a row, how do I know where one packet's data ends and another's begins? What if a single packet has more than 512 bytes of data?
All TCP examples i've found work in a rather procedural way.
I'd like to have something as simple as this:
Code:
Public Sub OnPacket(data As Byte())
End Sub
View 13 Replies
Mar 16, 2011
Can I send and detect individual SYN or FIN packets using VB.NET Sockets or any other process in VB.NET?
View 2 Replies
Jul 25, 2009
Since a few months I want to learn how to receive and send packets. Since WinSock doesn't work I think it'll be quite hard to get an easy way to do it.
I want to be able to send and get packets as a client. (TCP) I know that I need System.Net.Sockets, and that's quite everything...
View 5 Replies
Mar 8, 2011
I am on a new topic in VB.NET and I am so confused I don't really even know where to start. It is sending Parsed Packets. This packet below is a login server of a game and I want to know how to send it so it automatically does it.[code]....
View 6 Replies
Oct 15, 2011
I made a TCP server which communicates with multiple clients at once, but I can't seem to be able to make them stable. When one of the client sends 100 packets to the server, the server receives only a few of them.Here's the client code in PasteBin. It shows how the client connects to the server and then sends 100 messages in a For loop to the server.And here's how the server handles the connection. I couldn't paste the full source as it's hundreds of lines long so let me know if it's missing any mandatory parts and I'll upload them as well.
View 1 Replies
Oct 27, 2009
Here's the code on the sending side of my sockets:
Private Sub Send(ByRef Buffer() As Byte)
Dim obj_StateObject As New StateObject
obj_StateObject.WorkSocket = m_tmpSocket
[code].....
View 1 Replies
Feb 15, 2009
Well I need to send a raw packet to a Web Browser Control. The packet is:
"%xt%z%zo%50% . 1000000 . "%""
I need to send it to a flash game but I have no idea how to.
View 13 Replies
Jun 12, 2011
I have been trying to figure out how to use Packet X to Capture Packets from a certain program that uses UDP. Does anyone know how to do so?
View 1 Replies
Jul 6, 2011
I have a program which uses TcpClient, the issue I'm having is how do I construct the packets when some of them come in seperate parts. For example, If I receive 5 packets, 2 of them are fine, but the other 3 have come in seperate parts when it's suppose to be a whole packet. How can I handle this?
View 5 Replies
Aug 20, 2009
Im sending packets through UDP, and want to get the time it takes for the server to receive the packet from the client. Would the best way be by adding a timestamp to the packet the client sends, and then use that time with the server to calculate the actual time it took to receive?
View 39 Replies
Dec 28, 2009
Hey there, I thought i would redo my question, How could i send packets in VB to a IP and Port, I'm unsure on how to do this could somebody tell me?
View 4 Replies
Oct 11, 2010
I need to make a packet sniffer that will give me SSL packets. It doesn't need to give me any other information than the body of the packet, the actual data being sent to me. It does not need to differentiate between different IP addresses. And, it doesn't even need to differentiate between things which are and are not SSL packets. Any packets will be fine, it just needs to support SSL packets. The fewer lines of code the better...
View 5 Replies
Oct 1, 2009
Now i need to send separate packets from the server to the client.For the client I am using usual Tcp but for the server I am using Winsock Control. [code]...
View 5 Replies
Jun 10, 2010
Empty values in byte array at the end of one packet are replaced by beginning values of the next packet sent in TCP connection. How may I avoid this?
View 4 Replies
Feb 14, 2011
I'm trying to sniff packets from a specific application. I searched around but couldn't find anything useful, but I did hear something about WinPcap. What is WinPcap and how do I use it? Also, is there another way to sniff packets?
View 6 Replies
Jul 29, 2008
At my workplace I have been developing a server/client application which receives on port 8000 and sends on 8001. We do not have any other applications that use these ports, but we do have an application that accesses an SQL database in which part data is stored.
When I am doing testing on the application, if the server were to crash while the client app was sending a packet, could this lost packet cause issues with the network at all?I ask because for some reason we have been receiving connection timeout errors from the application that stores our product data, but we haven't made any changes or started running any new jobs on the network that I am aware of.
View 1 Replies
Sep 14, 2008
What Visual Basic code can be used to assemble and send a raw packet, and receive response packets? I looked on MSDN and I couldn't find any documentation for anything used to send a packet.
View 2 Replies
Oct 22, 2010
I have written a simple Server application that transmits an XML string to all connected clients when the user updates/alters a datagridview. When I connect to this server with telnet I can see the correctly formed xml string.
I have also written a client application, which on reception of the Xml string, displays it in a datagridview. But When I look at the xml string it is either missing parts of in the wrong sequence.
[Code]...
View 1 Replies
Jan 20, 2011
This procedure is inside of the xsd file:
Public Shared Sub AddRowData(ByVal sender As Object, ByVal e As System.EventArgs)
Dim myDataCol As DataColumn
Dim myDataRow As DataRow
[code]....
Before it leaves the procedure I'm checking the DataSet row and I see that the Variable are there.In the next step it goes to a form on which I'm viewing the relative report.The Last form has only the Load event, nothing else. there is no any row .
View 1 Replies
Nov 26, 2010
I have a MenuItem of a context menu of a Grid and its IsEnabled property is bound to MyProperty. It works fine until I actually click on the event handler of the MenuItem, which has no code in it. After I have clicked on the MenuItem the dataBinding no longer works.
I can tell cos' my breakpoint in the getter of MyProperty does not get hit.
[Code]...
View 2 Replies